WTS123456 发表于 2018-3-18 22:37:51

数组指针问题

int        a;
int(*p);

p=&a;

这里a不就是地址吗,为什莫还要取地址

2289001949 发表于 2018-3-18 23:03:29

你可以试一下编一个程序试试看看一个是

int      a=0;
int(*p);

p=&a;
printf(“%d”,*p);


一个是

int      a;
int(*p);

p=a;
printf(“%d”,*p);


看一下结果是什么

ba21 发表于 2018-3-18 23:20:40

本帖最后由 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:26:34

本帖最后由 风过无痕丶 于 2018-3-18 23:29 编辑

这个问题~我觉得用一个二维数组来解释可能会容易理解一点~我们通常的一个指针指向一个数组,他确实可以拿到这个数组的首地址,遍历这个数组,没问题!但是他只是指向数组的某一个元素!只有数组指针才是名正言顺的指向数组的指针,他指向整个数组,把数组看做一个整体!打个比方

int a;
int (*p);
p = a;
这个时候对指针进行运算~
p++;
奇迹的事情就发生了~指针的步长是多少?
指针现在的位置是 p
指针的步长的步长是10个int~

得出结论! 数组指针要的不是一个变量的地址,而是这个数组的地址!既然要整个数组的地址~是不是要加上&取值运算符~
ps : 其实我觉得加不加都无所谓~但是你必须得明白这其中的含义~

页: [1]
查看完整版本: 数组指针问题