*(*p + i)),怎么理解,*p指向的是什么
#include <stdio.h>#include <string.h>
//************************指针数组与数组指针*************************
//数组指针:指向的是数组地址,不是数组的第一个元素地址
int main()
{
int temp = {1,2,3,4,5};
int (*p) = &temp;//取数组的地址给数组指针
int i;
for (i = 0;i<5;i++)
{
printf("%d\n",*(*p + i));
}
return 0;
}
你运行下这个看看~应该就理解了吧
我添加的这几行打印地址,前四个打印出来的是同一个地址,但是意义不同
看后两个的地址就知道了
*p+1指向的是下一个int类型变量的地址,也就是temp的地址,跳过的字节数是一个int类型变量的长度;
p+1指向的是下一个数组的地址,跳过的字节数是五个int类型变量的长度
所以说*p指向的是temp, p指向的是temp
#include <stdio.h>
#include <string.h>
//************************指针数组与数组指针*************************
//数组指针:指向的是数组地址,不是数组的第一个元素地址
int main()
{
int temp = {1,2,3,4,5};
int (*p) = &temp;//取数组的地址给数组指针
int i;
printf("temp 地址:%p\n",temp);
printf("temp 地址:%p\n",&temp);
printf("*p:%p\n",*p);
printf(" p:%p\n",p);
printf("*p+1:%p\n",*p+1);
printf(" p+1:%p\n",p+1);
for (i = 0;i<5;i++)
{
printf("%d\n",*(*p + i));
}
return 0;
} 我来晚了,就什么都不说了,支持一下 sunrise085 发表于 2020-9-26 21:21
你运行下这个看看~应该就理解了吧
我添加的这几行打印地址,前四个打印出来的是同一个地址,但是意义不同
...
1.”p+1指向的是下一个数组的地址,跳过的字节数是五个int类型变量的长度“,指向了下一个不知道啥数组的数组?是不是计算机的内存会分配哪些地方存数组,哪些地方存字符串?
猪猪虾 发表于 2020-9-26 21:36
1.”p+1指向的是下一个数组的地址,跳过的字节数是五个int类型变量的长度“,指向了下一个不知道啥数组的 ...
指向了下一个不知道啥数组的数组?
只是这么一说,并不是说接下来的地址就一定是数组,重点意思是说跳过一个数组的长度。
是不是计算机的内存会分配哪些地方存数组,哪些地方存字符串?
这句话不对哟,没有这么分配 本帖最后由 猪猪虾 于 2020-9-26 21:51 编辑
风过无痕1989 发表于 2020-9-26 21:35
我来晚了,就什么都不说了,支持一下
别走啊,请教一下,在
int temp = {1,2,3,4,5}
int *p = temp;
这里的temp是数组的第一个元素的地址,*p指向的是数组第一个元素的地址,(p+ i) 是指向第i个元素的地址,*(p+ i)取的是第i个元素的值
在(*p) 里面,P指向的是temp这个数组,*p指向temp,(*p + i) 指向temp元素,*(*p + i)取temp的值,
这么理解对吗
本帖最后由 猪猪虾 于 2020-9-26 21:55 编辑
sunrise085 发表于 2020-9-26 21:47
只是这么一说,并不是说接下来的地址就一定是数组,重点意思是说跳过一个数组的长度。
这句话不对哟 ...
别走啊,请教一下,在
int temp = {1,2,3,4,5}
int *p = temp;
这里的temp是数组的第一个元素的地址,*p指向的是数组第一个元素的地址,(p+ i) 是指向第i个元素的地址,*(p+ i)取的是第i个元素的值
在(*p) 里面,P指向的是temp这个数组,*p指向temp,(*p + i) 指向temp元素,*(*p + i)取temp的值,
这么理解对吗
猪猪虾 发表于 2020-9-26 21:51
别走啊,请教一下,在
int temp = {1,2,3,4,5}
int *p = temp;
对的 猪猪虾 发表于 2020-9-26 21:51
别走啊,请教一下,在
int temp = {1,2,3,4,5}
int *p = temp;
sunrise085 朋友在2楼已经说得很清楚了,也写了一个程序让你理解了,我就是再说也是这样呀,这样吧,我给你一个程序,你试试看,然后再去理解2楼的解答。下面的程序,由于 string.h 头函数在本程序中用不着,故而我将它去掉了。下面两个程序输出是完全一样的
#if(0)
#include <stdio.h>
//************************指针数组与数组指针*************************
//数组指针:指向的是数组地址,不是数组的第一个元素地址
int main()
{
int i;
int *p,temp = {1,2,3,4,5};
p = temp;// 将数组的地址赋给p
for (i = 0;i<5;i++)
{
printf("%d\n",*(p + i)); // p + i 是第i个元素的地址,*(p + i)是取第i个元素的值
}
return 0;
}
#endif
#if(1)
#include <stdio.h>
//************************指针数组与数组指针*************************
//数组指针:指向的是数组地址,不是数组的第一个元素地址
int main()
{
int temp = {1,2,3,4,5};
int (*p) = &temp;// 取数组的地址给数组指针
int i;
for (i = 0;i<5;i++)
{
printf("%d\n",*(*p + i)); // *p是取数组指针的地址,*p + i 得到第 i 个数组指针保存的地址,*(*p + i) 取该数组指针所指向地址的值
}
return 0;
}
#endif
页:
[1]