指针数组和数组指针

作者: 学益得智能硬件分类: 校园学习 发布时间: 2022-12-07 10:24:57 浏览:14412 次

指针数组和数组指针

惊鸿YI瞥:
指向10个元素数组的指针为ptr,所以ptr➕1肯定指向下一个10元素数组,所以10*1(char)个字节,而指针数组中的几个字符串本身就是指针变量,也就是地址,所以str代表地址的地址,并不是变量活着数组的地址,地址(也就是指针)在windows上占8个字节,所以➕8

【回复】你错了把自己给绕进去了,大道至简,别管你啥类型的数组,数组名就是数组的地址,也就是str【0】这个元素的地址
【回复】而+1就是跳了一个数组元素罢了,只需要知道str这个数组每个位置多大就对应了增加了多少的地址
小来来了o:
讲的短但是很清楚,不像其他的又长又难懂!果断两个币!

流夏清风:
谢谢分享,我是非计算机专业的,只是对C语言感兴趣,自学到指针那里就放弃了。就是明明有变量就可以解决很多问题,为什么还要引用指针?而你这个视频就解决我最大的一个困惑:明明是已经确定了数组中元素的数据类型,为什么从一个元素转到下一个元素指针都是加1而不是加对应数据类型占用的字节数。

【回复】回复 @流夏清风 :c++规范只规定每个类型最低是多少字节,不同的编译器具体的实现不同也会导致类型占用的字节不同
【回复】回复 @流夏清风 :对啊,编译器不同,有些语句在这个编译器是合法的,在那个可能就不合法,而且同一个语句在不同的编译器上面允许,可能结果是不一样的
【回复】个人理解:在写代码时指针变量加1操作实际上是加了一个类型的地址所占大小的,只是这样写而已,比如说一个int型的指针变量P,它保存的地址是FE00,对其进行P=P+1操作,它保存的地址就变为了FE04,因为int类型的数据占4个字节,所以实际上给这个指针变量地址加了4
谓无名_非常名:
数组指针:char (*str)【10】,是指向数组的指针,而数组是char型,所以str+1应该加1字节。[胜利]

【回复】那如果是int加的是40个字节吗
iKsGodT:
ptr=&s这里是正确的吗,不是s本身就是数组的首地址吗

【回复】你理解是正确的,可以直接S赋值prt指针就行,不用取地址
【回复】回复 @学益得智能硬件 :其实s已经是地址了,为什么要设置二级地址呢,不直接把s的地址赋值给*prt指针不就行了
Whisperverse:
指针数组是存放指针的数组。str也就是首元素地址,&str是整个数组的地址。虽然在print语句中输出的内容都是一样的地址,但是他们的权重不一样,以这个char*str【2】={"hello","world"举例,srt+1会跳过8*1个字节,&str+1会跳过整个数组也就是8*2个字节。

每揽镜自顾总难以自拔:
很简单,数组指针ptr是指向数组的指针,而一个数组10个字符,一个字符占10个字节,所以ptr+1以一个数组为单位跳转,所以是加10个字节

Piecewhite:
指针数组非常好理解,每一个成员都是指针变量,数组指针的话我越看越眼熟,感觉这不就是二维数组吗,毕竟创建一维数组的时候也可以写成 char *p; p=malloc(xx); *(p+0)=xx; *(p+1)=xx; 这样 所以不难得出*ptr+1是加了10个字节

意恢灰:
为什么str+1的地址是0x1008?我觉得应该是0x1004[笑哭]

早睡早起120:
有个问题,随谁能解答一下[doge] 如果是str[2]那么0x100还是数组第一个元素吗 str[0]还是指针指向hello吗

白九荥:
学校老师照着ppt念了两节课就把指针讲完了,现在脑袋嗡嗡的。现在找课学来应付作业[藏狐]

【回复】https://www.bilibili.com/video/BV18B4y1Y7Ny/?spm_id_from=333.999.0.0&vd_source=56446e40c4fa4937f584b309d68c97f4

C语言 指针

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!