韩城黄河矿业王婷:问一个c语言的问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/03 10:51:59
本人初学c语言,不知道int (*p)[5代表什么意思,int a[5][5];请问能这样赋值吗?
p=a;
它和 int*p[5]有什么区别,各应该怎样赋值???谢谢

我也在这个问题上曾经困惑过,其实区分它们只要记住以下几条就很简单了。
(1)
int a[3][4];//二维数组,存储int型的数值,编译器为这个二维数组分配了3*4个sizeof(int)的连续空间
(2)
int* b[4];//一维数组,存储int*型的数值,也就是人们常说的指针数组,该数组用来存储int型数据的地址,编译器为该一维数组分配了4个sizeof(int *)的空间
例如:
int a,b,c,d;
b[0] = &a;
b[1] = &b;
b[2] = &c;
b[3] = &d;
(3)
int (*p)[4];//这个稍微复杂一些。本语句表示的含义就是说:p是一个指向二维数组的首指针,并且这个二维数组低维的维数为4。因此,编译器只是为p分配了一个指针的空间,在32位系统中,一般是4个字节。由于它不是一个数组,因此,编译器也不会为之分配数组空间。
因此,如下赋值是不对的。
int a[3][5];
int (*p)[4] = a;//维数不匹配
但是你可以这样写:
int a[3][4];
int (*p)[4] = a;//你可以用p[1][2]等来调用a中的元素,就像用a[1][2]一样

另外还有一点,int (*p)[4] 不仅可以向上面所述的,给其赋予一个低维相同的二维数组的起始地址,它也可以用于函数参数的传递之中。可以参见最后代码中的ShowValue1。
(4)
另外二维数组在函数中的参数传递也经常采用
int p[][4]的形式。可以参考代码中的ShowValue2。
int (*p)[4]和int p[][4],都是用来指向一个低维空间为4 的二维数组的首地址。在函数的参数传递中,可见它们的效果是一样的。它们都只有一个指针的空间,因为他们只是用来记录一个数组的起始地址。
但是,int p[][4]还有不同之处。就是你不能在程序中使用
int p[][4];
或者
int a[3][4];
int p[][4]=a;
这种方式来为其赋值。它只能用于函数参数的传递。这是因为编译器在遇到 int p[][4]; 时,会将其视为普通的二维数组来处理,因此不能确定其大小,会编译出错。
但是你可以用
int n[][4] ={1,2,3,4,5,6,7,8,9,10,11,12};
来初始化一个常规的二维数组。
注意!!!

附参考代码:
#include "stdafx.h"

void ShowValue1(int (*p)[4])
{
int i,j;
for(i = 0; i< 3; i++)
{
for(j = 0 ; j < 4 ; j++)
printf("%d ",p[i][j]);
printf("\n");
}

}

void ShowValue2(int p[][4])
{
int i,j;
for(i = 0; i< 3; i++)
{
for(j = 0 ; j < 4 ; j++)
printf("%d ",p[i][j]);
printf("\n");
}

}

int main(int argc, char* argv[])
{
int i,j,k=0;
int a[3][4];
for(i = 0 ;i < 3; i++)
for(j = 0 ; j < 4 ; j++)
a[i][j] = k++;

int (*p)[4]; //可以首先定义,然后再赋值
p = a;
for(i = 0; i< 3; i++)
{
for(j = 0 ; j < 4 ; j++)
printf("%d ",p[i][j]);
printf("\n");
}

int (*c)[4] = a; //在定义时即进行初始化
for(i = 0; i< 3; i++)
{
for(j = 0 ; j < 4 ; j++)
printf("%d ",c[i][j]);
printf("\n");
}

//int l[][4];//error
//int m[][4] = a; //error

ShowValue1(a);
ShowValue2(a);

return 0;
}

这样能赋值

int(*p)[5]是指针数组
int *p[5]是数组指针(就是指向数组的指针)

一个是存放指针的数组
一个指针,不过是一个数组指针。

[]运算级别比*高所以int *p[5]先定义p[5]数组然后于*结合表示指针数组
而int (*p)[5]先是p于*结合定义指针表示这个指针指向5个元素的一维数组