数组指针问题
int a;int(*p);
p=&a;
这里a不就是地址吗,为什莫还要取地址 你可以试一下编一个程序试试看看一个是
int a=0;
int(*p);
p=&a;
printf(“%d”,*p);
一个是
int a;
int(*p);
p=a;
printf(“%d”,*p);
看一下结果是什么
本帖最后由 ba21 于 2018-3-19 00:07 编辑
在一维数组中
p=&a;和p=a;是一个意思
#include <stdio.h>
int main(void)
{
inta={1,2,3,4,5};
int(*p);
p=a; //也可 p=&a;
printf("%d\n", *(*p+2));
}
如果是在多维数组中就要区别对待
假设: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 本帖最后由 风过无痕丶 于 2018-3-18 23:29 编辑
这个问题~我觉得用一个二维数组来解释可能会容易理解一点~我们通常的一个指针指向一个数组,他确实可以拿到这个数组的首地址,遍历这个数组,没问题!但是他只是指向数组的某一个元素!只有数组指针才是名正言顺的指向数组的指针,他指向整个数组,把数组看做一个整体!打个比方
int a;
int (*p);
p = a;
这个时候对指针进行运算~
p++;
奇迹的事情就发生了~指针的步长是多少?
指针现在的位置是 p
指针的步长的步长是10个int~
得出结论! 数组指针要的不是一个变量的地址,而是这个数组的地址!既然要整个数组的地址~是不是要加上&取值运算符~
ps : 其实我觉得加不加都无所谓~但是你必须得明白这其中的含义~
页:
[1]