C语言之指向数组的指针

来源:互联网 发布:ws848进入编程模式 编辑:程序博客网 时间:2024/05/17 08:53

C语言之指向数组的指针

int a[3],*p;

p=a;正确

int b[2][3],**q;

q=b;错误

初学c语言时总会这样声明一个指向二维数组的指针,按一维数组与一级指针的关系,二维数组与二级指针也应该有这样的关系呀,,,,,,,

怎么会错?

要解决这个问题首先让我们来研究下一维数组的数组名与一级指针的含义

int *p表示p是一个指向int类型的指针

int a[3] a是一个数组这个数组中存放的是3int类型的元素即a是一个有个元素的int 类型的一维数组

c语言中数组名就是数组的首地址,即a指向一维数组的第一个元素

而一维数组的第一个元素a[0]就是一个int类型的变量,而p正是一个指向int类型的指针

Sop=a  right

下面让我们看下二维数组b与二级指针q

int **q表示q是一个指针这个指针指向一个int *类型的指针

int b[2][3]  b是一个数组这个数组中存放的是2个有3int元素的一维数组

b就是二维数组的首地址,指向二维数组的第一个元素,二维数组中的第一个元素是?

int [3]是一个有三个int类型元素的一维数组

所以应该这样声明 int (*q)[3]    q是一个指针这个指针指向一个数组这个数组有3int类型的元素

这样q就是一个指向一个二维数组且第二维为三个int类型元素的指针了

就是说在声明一个指向数组的指针时,确保这个指针能指向数组的第一个元素就行了(把所有的数组当作一维数组来看待,不存在多维数组)

如果非要用多级指针指向一个多维数的话可以这样声明

如 

int a[2][3] , **p

p=&a[0][0]

int a[2][3][4] , ***p

p=&a[0][0][0]

那如果数组是100维?

你是不是要写100*100[0] ?

 

下面让我们来看下这个问题

int **p ,  (*q)[3], a[2][3]

q=a

p=q 

q=p

void add(int **p)

add(q)

开动大脑分析下那个语句是正确的那个是错误的,、 and why ???

0 0
原创粉丝点击