前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >指针与数组的关联3 --声明

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

作者头像
py3study
发布于 2020-01-13 04:32:21
发布于 2020-01-13 04:32:21
86400
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

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

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

test.c:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char arr[] = "hello world";
char *p = "hahahahahaha

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

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

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

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

test.c

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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;
}

 结果如下:

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

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

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

(完)

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
什么是 字符指针? 数组指针? 函数指针? 函数指针数组?
代码 const char* pstr = “hello world.”; 特别容易让我们以为是把字符串 hello world. 放到字符指针 pstr ⾥了,但是本质是把字符串 hello world. 首字符的地址放到了ps!!tr中。
用户11317877
2024/10/16
840
什么是 字符指针? 数组指针? 函数指针? 函数指针数组?
C语言——指针(四)
我们都知道数组中**首地址[下标]**的形式可以实现对元素的查找,其实字符串也可以用同样的形式来查找字符串中的内容。
用户11029137
2024/03/19
950
C语言——指针(四)
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)
通过前几节我们学了前面五节指针和学习了sizeof操作符知识,本小节,阿森继续和你一起做一维数组和指针笔试题,🏂当然还有关于指针运算的笔试题,干货满满!让我们开始做题😁 !(🌷当然,宝子们,天气变化大,记得多注意保暖🌷)
学习起来吧
2024/02/29
1680
【C指针】深入理解指针(最终篇)数组&&指针&&指针运算题解析(一)
【C语言】指针&&二级指针&&数组指针&&指针数组详解
我们可以通过&(取地址操作符)取出变量的内存起始地址,把地址可以存放到一个变量中,这个变量就是指针变量
用户10925563
2024/06/04
9870
【C语言】指针&&二级指针&&数组指针&&指针数组详解
【C语言】深入解开指针(四)
通过对前面指针的学习,你可能对指针有了一些理解,比如,数字名的理解,然后怎么使用指针来访问数组,二级指针,指针数组 …
学习起来吧
2024/02/29
1330
【C语言】深入解开指针(四)
学习——理解指针(3)
通过之前的学习,我们了解了指针,int*是整型指针,指向的是整型;那么,指向字符型的指针就是字符指针,即char*
星辰与你
2024/10/17
630
学习——理解指针(3)
C语言——I /深入理解指针(三)
代码 const char* p = "hello bit."; 字符串 hello bit 放到字符指针 p ⾥了,但是本质是把字符串 hello bit. ⾸字符的地址放到了p中(类似于数组)。
用户11015888
2024/03/11
1310
C语言——I /深入理解指针(三)
C语言从入门到实战——数组和指针的强化练习题
指针是一个变量,存储的是另一个变量的地址。可以通过指针来访问另一个变量的值。指针变量可以存储任何类型的地址,包括数组的地址。
鲜于言悠
2024/03/20
1330
C语言从入门到实战——数组和指针的强化练习题
【C语言】(指针系列2)指针运算+指针与数组的关系+二级指针+指针数组+《剑指offer面试题》
指针是一个存放地址的变量,这些我们都知道,但是对于一个指针来说,他的运算是怎么样的?我们可以看看。我们都知道数组在内存中是连续存放的,只要知道首地址,我们就可以知道后面几个元素的地址。
用户11367452
2024/11/21
1630
【C语言】(指针系列2)指针运算+指针与数组的关系+二级指针+指针数组+《剑指offer面试题》
【c语言】 sizeof、strlen计算字符大小长度题目总结概括(详解)
sizeof可以理解为一个操作符,其作用简单的说就是返回一个对象或者类型所占的内存字节数。
洁洁
2023/10/10
8940
【c语言】 sizeof、strlen计算字符大小长度题目总结概括(详解)
C语言之指针详解(3)
上述的代码const char* pstr = "hello bit.";特别容易让大家以为是把字符串hello bit.放到字符指针pstr里了,但是本质是把字符串hello bit.首字符的地址放到了pstr中。所以说,上面的代码是把常量字符串的首字符h的地址放到指针变量pstr中。
Crossoads
2024/10/21
650
C语言之指针详解(3)
【C语言】指针总结3
注:代码 const char pstr = “hello.”; 特别容易让人以为是把字符串 hello 放 到字符指针 pstr 里了,但是本质是把字符串 hello. 首字符的地址放到了pstr中。*
用户11290673
2024/09/25
760
【C语言】指针总结3
拿捏指针(二)
前面我们已经讲了,C语言的第一篇《拿捏指针(一)》,接下里我们继续深入的来了解指针。
秋邱
2024/10/09
660
拿捏指针(二)
轻松拿捏C语言——【保姆级·指针讲解】期末C语言<指针>急救包,全是干货,诚意满满!
有一栋楼,里有200个房间,假如我们要去某个房间找某个人,然后他说他在C304,我们就能通过门牌号C304快速找到他所在房间。
用户11162265
2024/06/14
1130
轻松拿捏C语言——【保姆级·指针讲解】期末C语言<指针>急救包,全是干货,诚意满满!
指针(3)---不同指针变量
在这行代码中,貌似将hello bit.这个字符串放进了字符指针变量pstr中,但事实真的如此吗?
Skrrapper
2024/06/18
760
指针(3)---不同指针变量
【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析
转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/20472269
韩曙亮
2023/03/27
4K0
【嵌入式开发】C语言  内存分配 地址 指针 数组 参数 实例解析
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
走在努力路上的自己
2024/01/26
5690
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
本篇为指针系列的最后一篇,我们将在该篇 vlog 对指针的常见表达形式的概念及技巧进行深入的解析,通过该篇 vlog 可以让你以后在遇到指针时基本都能将代码转化为自己的语言去理解,建议先思考后再看解析,更有助于加深理解,希望能够为广大读者们在初学指针时排忧解惑 😃
DARLING Zero two
2024/11/19
570
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
指针超详解(1)
在C语言里,地址指的是内存中某个位置的标识符(它的名字)。每个变量或数据都有唯一的位置,在这个位置给他取了个名字。我们就可以通过这个名字在内存里找到这个变量或数据。
技匠晓晨
2024/11/26
1410
指针超详解(1)
详解C语言中的数组指针与指针数组
数组指针的意思即为通过指针引用数组,p先和*结合,说明了p是一个指针变量,指向一个大小为5的数组。所以,int (*p)[5]即为一个数组指针。int *p[5]则是一个大小为5且存放整型指针的数组。
全栈程序员站长
2022/09/19
3.5K0
详解C语言中的数组指针与指针数组
推荐阅读
相关推荐
什么是 字符指针? 数组指针? 函数指针? 函数指针数组?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文