miniArce 发表于 2020-6-16 23:23:44

指针取数组地址

int a = { 1,3,55,4,5,6,7,8,9,10 };
        int *p = a;
        printf("%d\n", *p + 1);
        printf("%d\n", *(p+1));
        printf("%d\n", p + 1);
        *p + 1和*(p+1)还有p+1本质区别是什么

Cute_Traver_Cat 发表于 2020-6-16 23:53:45

p是数组第一个元素的地址
*p是数组第一个元素
所以,*p+1是第一个元素+1,也就是a+1
*(p+1),地址后移一个int长度,所以就是a
p+1就是地址值+1啦

miniArce 发表于 2020-6-16 23:58:33

Cute_Traver_Cat 发表于 2020-6-16 23:53
p是数组第一个元素的地址
*p是数组第一个元素
所以,*p+1是第一个元素+1,也就是a+1


p+1指向哪里呢?

chxchxkkk 发表于 2020-6-17 00:30:42

miniArce 发表于 2020-6-16 23:58
p+1指向哪里呢?

假如p的地址是 0x123 那么p+1就是0x124了

miniArce 发表于 2020-6-17 01:52:00

chxchxkkk 发表于 2020-6-17 00:30
假如p的地址是 0x123 那么p+1就是0x124了

p+1所指向的元素又是哪个呢?

Mike_python小 发表于 2020-6-17 07:40:35

c or c++?{:10_247:}{:10_247:}

KevinHu 发表于 2020-6-17 08:32:22

chxchxkkk 发表于 2020-6-17 00:30
假如p的地址是 0x123 那么p+1就是0x124了

这样说不对,把一个指针+1就是指向数组的下一个地址(如一个int指针,原来是0x123,+1就是0x127了(int用四个字节存储))

405794672 发表于 2020-6-17 11:02:28

幸好看了一下你的代码。万幸,差点说错了。。
*取值。p为地址。
*p+1即,p地址中的值,加上1作为结果
*(p+1),p地址加上一个地址。即p的下一个地址,取它的值。
p+1就是地址的下一个地址。是按地址加的。该地址不是加一字节,而是加p类型的长度
假如p是整型地址,它的地址中的值占四个字节,那么,加1就是四个字节后的。这个1也代表了有四个字节

miniArce 发表于 2020-6-17 19:28:40

405794672 发表于 2020-6-17 11:02
幸好看了一下你的代码。万幸,差点说错了。。
*取值。p为地址。
*p+1即,p地址中的值,加上1作为结果


好的,谢谢
页: [1]
查看完整版本: 指针取数组地址