返回顶部
首页 > 资讯 > 后端开发 > Python >指针与数组的关联3 --声明
  • 658
分享到

指针与数组的关联3 --声明

数组指针声明 2023-01-31 01:01:05 658人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

    当我们在调用函数时,传递数组,就是把数组首元素的地址传递给函数,本质也就是给函数传递了一个指针变量。这时候我们会想那么数组是不是跟指针是一样的。为了验证,我们可以给一个项目里创建一个新的源文件,里面创建一个指针变量和是个数组,然后在

    当我们在调用函数时,传递数组,就是把数组首元素的地址传递给函数,本质也就是给函数传递了一个指针变量。这时候我们会想那么数组是不是跟指针是一样的。为了验证,我们可以给一个项目里创建一个新的源文件,里面创建一个指针变量和是个数组,然后在另一个文件中用数组的方法声明指针,在用指针的方法声明这个数组进行调试,看下结果会如何。

    我们创建一个test.c文件用来编写主函数,test1.c创建变量编写内容如下:

test.c:

#include <stdio.h>
extern char*arr;
extern char p[];
int main()
{
printf("arr=%s\n", arr);
printf("p=%s\n", p);
return 0;
}

test1.c:

char arr[] = "hello world";
char *p = "hahahahahaha

    我们运行这个工程会怎么样呢,答案是当程序走到第一个printf时是会崩溃掉的,原因是我们在test1.c中定义的是一个数组,却在test.c中用指针声明引用,那么在*arr这个指针中存放的内容其实是

"hello world",这个字符串,指针能存放字符串吗?答案当然是不可以的,指针只能存放一个地址,当你放进去一个字符串,自然会在运行的时候发生内存错误。那么第二个printf输出的是不是hahahahahaha呢,其实也不是,第二个printf单独拿出来虽然可以正常运行,但是他的结果绝对不是我们想要的内容,其结果如下:

wKioL1ZPPpKz8LEoAAA_TGelu7c037.png

    是个乱码,这是因为我们输出的时候,拿到的是地址,把地址放到一个char类型的字符串里,等于把一个地址通过字符类型输出来了,自然是乱码。

    这里我们便清楚地看到了指针和数组的差别了吧。那如果想正常输出我们应该怎么办,做法如下:

test.c

#include <stdio.h>
extern char*arr;
extern char p[];
int main()
{
printf("arr=%s\n", (char*)(&arr));
printf("p=%s\n", (char*)(*(int*)p));
return 0;
}

 结果如下:

wKiom1ZPSIWCFQxfAABAqXUF260808.png 

  对于第一个,我们接收到的是一个指针,里面存放的却是一一个字符串,所以我们可以直接去arr的地址,然后强制类型转换为一个char型的指针变量进行输出。

    第二个接收到的是一个地址,我们知道地址所占字节是和int*类型所占字节是相等的,所以我们先把他转换成int*类型,然后解运用,拿到这个数组的内容(地址),把这个地址咱转换为char*型,这样我们就能用printf输出这个内容了。

    这个例子足以证明指针和数组的区别,指针的内容仅仅是个地址,而数组是个个数据的集合,他里面可以是地址(指针),也可以是其他类型的元素,而数组的地址其实也就个指针。所以说数组和指针其实有着本质的区别。希望大家注意。

(完)

如有不足或者错误之处,希望批评指正。

--结束END--

本文标题: 指针与数组的关联3 --声明

本文链接: https://lsjlt.com/news/184759.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 指针与数组的关联3 --声明
        当我们在调用函数时,传递数组,就是把数组首元素的地址传递给函数,本质也就是给函数传递了一个指针变量。这时候我们会想那么数组是不是跟指针是一样的。为了验证,我们可以给一个项目里创建一个新的源文件,里面创建一个指针变量和是个数组,然后在...
    99+
    2023-01-31
    数组 指针 声明
  • C++数组和指针的区别与联系
    目录1 数组和指针的概念2 数组和指针的操作2.1 赋值2.2 存储2.3 大小2.4 初始化3 数组和指针的传参3.1 数组的传参3.2 指针的传参4 总结前言: 一直以来,有很多...
    99+
    2024-04-02
  • C++指针与数组:指针详解
    目录一. What(什么是指针)1. 地址初了解2. 指针概念3. 指针与指针变量二. Why(为什么要有指针)三. How(如何使用指针)1. 基本定义2. 取地址操作符 &...
    99+
    2024-04-02
  • C语言的数组指针与函数指针详解
    目录前言函数指针语法数组指针与指针数组总结前言 数组指针和函数指针都是C语言比较难的知识点,尤其是函数指针,并且函数指针在开发中有着巨大的作用。 函数指针语法 定义一个函数指针,并通...
    99+
    2024-04-02
  • 如何分析C++数组和指针的区别与联系
    这期内容当中小编将会给大家带来有关如何分析C++数组和指针的区别与联系,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言:一直以来,有很多地方在说到数组和指针时都会说数据就是指针,这种观点也被越来越多的人...
    99+
    2023-06-26
  • C++ 内联函数与函数指针的区别
    内联函数直接展开而不调用,而函数指针存储指向函数地址的变量,允许间接调用函数。 C++ 内联函数和函数指针的区别 什么是内联函数? 内联函数是编译器在编译时直接展开的函数。这意味着内联...
    99+
    2024-04-16
    函数指针 内联函数 c++
  • C++指针和数组:字符和字符串、字符数组的关联和区别
    目录一、字符指针、字符数组字符指针字符数组二、字符串指针三、(字符串)指针数组四、总结字符串的本质就是字符数组,将字符串作为字符数组来处理。字符数组和字符串都可以作为存放字符的数组,...
    99+
    2022-12-23
    C++字符 C++字符串 C++字符数组
  • 掌握指针进阶:探索字符指针、数组指针和指针数组的妙用
    💓博客主页:江池俊的博客⏩收录专栏:C语言进阶之路👉专栏推荐:✅C语言初阶之路 ✅数据结构探索💻代码仓库:江池俊的代码仓库​🎪 社区...
    99+
    2023-09-07
    c语言 开发语言 学习 经验分享
  • C语言如何使用数组指针与函数指针
    这篇文章主要为大家展示了“C语言如何使用数组指针与函数指针”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言如何使用数组指针与函数指针”这篇文章吧。函数指针语法定义一个函数指针,并通过函数指针...
    99+
    2023-06-29
  • shellBash的数组与关联数组的实现
    目录一、一般数组1.初始化2.取3.循环二、关联数组1.com2.初始化3.取4.循环一、一般数组 1.初始化 Bash Shell 只支持一维数组,不支持多维数组;不需要声明,初始...
    99+
    2023-02-16
    shell 数组与关联数组 shell 关联数组
  • 指针数组和数组指针的区别是什么
    区别:对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于...
    99+
    2023-05-14
    指针数组 数组指针 C语言
  • Golang函数的指针数组、数组指针怎么应用
    这篇文章主要介绍了Golang函数的指针数组、数组指针怎么应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang函数的指针数组、数组指针怎么应用文章都会有所收获,下面我们一起来看看吧。Golang指针数...
    99+
    2023-07-06
  • Golang函数的指针数组、数组指针的应用技巧
    随着Golang语言的不断发展,函数的指针数组和数组指针也成为了Golang编程中的重要组成部分。在本篇文章中,我们将会探讨Golang函数的指针数组和数组指针的应用技巧,并为大家提供一些实用的示例代码和相关的解释。Golang指针数组的基...
    99+
    2023-05-16
    Golang函数 指针数组 数组指针
  • shell Bash的数组与关联数组的实现
    目录一、一般数组1.初始化2.取3.循环二、关联数组1.com2.初始化3.取4.循环一、一般数组 1.初始化 Bash Shell 只支持一维数组,不支持多维数组;不需要声明,初始化时直接用变量接,只要右边是括号,不需...
    99+
    2023-02-16
    shell 数组与关联数组 shell关联数组
  • PHP数组的声明方式
    这篇文章主要介绍“PHP数组的声明方式”,在日常操作中,相信很多人在PHP数组的声明方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP数组的声明方式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!一、...
    99+
    2023-06-17
  • php中关联数组指的是什么
    这篇“php中关联数组指的是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php中关联数组指的是什么”文章吧。在PHP中...
    99+
    2023-07-02
  • GO中 分组声明与array, slice, map函数
    目录iota 枚举Go 程序设计的一些规则数组切片mapmake、new 操作前言: 在 Go 语言中,同时声明多个常量、变量,或者导入多个包时,可采用分组的方式进行声明。 例如下面...
    99+
    2024-04-02
  • C语言指针数组和数组指针的区别有哪些
    这篇“C语言指针数组和数组指针的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言指针数组和数组指针的区别有哪些...
    99+
    2023-07-04
  • Linux shell数组与关联数组的用法实例
    1. 关联数组 MLzXWplae 使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量; $ declare -A fruits_pr...
    99+
    2022-06-04
    linux shell数组与关联数组 linux shell数组与关联数组的用法实例
  • 详解C++ 指针与二维数组名
    和一维数组类似,C++ 将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素为一维数组,下面详细总结下二维数组名的性质。 和一维数组类似,C++ 将二维数组名解释为其第一个元...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作