第23课,数组指针的程序不是很理解
看不懂的部分用//标出来了。#include <stdio.h>
int main()
{
int temp = {1, 2, 3, 4, 5};
int (*p2) = &temp;
int i;
for (i = 0; i < 5; i++)
{
// p2表示数组的地址,那*p2 表示的不就是整个数组的值?
printf("%d\n", *(*p2 + i));
}
return 0;
}
(*p2) 是数组指针 意指 指向数组的指针
那么p2是数组的地址。
*p2 是数组第1个元素的地址。
那么*p2 + i 第1个元素的地址 + i 第i个元素的地址。
再那么*(*p2) 取第1个元素的值。
再那么*(*p2 + i)取第i个元素的值。
这个最最最最要注意的是 数组指针 指向的是数组(是数组的地址,虽然它和第1个元素的地址是一样,但是它们还是有区别的)。 解引用后(*p)后是第1个元素的地址
ba21 发表于 2018-4-26 18:07
谢谢回复,p2是数组的地址,为什么*p2是第一个元素的地址呢?之前学习的 指针p,*p 表示p保存的地址的那个地址中的值,为什么到这里加星号变成了第一个元素的地址? markfzc 发表于 2018-4-26 18:15
谢谢回复,p2是数组的地址,为什么*p2是第一个元素的地址呢?之前学习的 指针p,*p 表示p保存的地址的那 ...
你也知道说是 指针p
指针p 跟 数组指针p 是一回事么? 说多了你也不一定消化的了,记住上面的就对了。
你实在有这个能力可以看下面:
数组指针和指针是两个不同的类型:
假设:int array={{1,2,3},{4,5,6}};
1,二维数组名是数组指针 (array: 是指向int (*)类型的指针)
2,二维数组名取址是二维数组指针 (&array: 是指向 int (*)类型的指针)
3,二维数第0行的首地址是数组指针(&array:是指向int (*)类型的指针)
4,二维数组首元素的地址是指针类型(array:是指向int *类型的指针)
参考:http://blog.csdn.net/pipinuan/article/details/53193289 ba21 发表于 2018-4-26 18:19
你也知道说是 指针p
指针p 跟 数组指针p 是一回事么? 说多了你也不一定消化的了,记住上面的就对了。
...
想明白了,其实就是类似于层层包裹。解引用就是类似层层突破。只要没有取到值,得到就永远是地址。
页:
[1]