二维数组定义 **a

作者&投稿:势委 (若有异议请与网页底部的电邮联系)
c语言中二维数组a[i][j],为什么a=*a?~

在C语言中,二者是相同的地址值。所以可以说a=*a.

二维数组a定义为a[i][j]时,代表一组数据,有i行j列,共计i*j的元素。

这组数据在内存中是连续存放的。而在C语言的使用中,a是二维数组的首地址。*a也就是a[0],是二维数组第一行的首地址。
所以,二者是相同的地址值,即数据a[0][0]的地址值。
也就是说,从值上,a,*a, a[0],&a[0][0]都是相同的值。

当时,说a=*a也并不是完全正确的,从类型上,a等同于二维指针,而*a等同于一维指针。二者类型并不相同,只是在一定条件下可以转换。

[] 在 c 语言中不是标点符号,而是运算符。
有恒等式: a[i] = *(a+i)
所以,表达式里, *a[0] = *(*(a+0)) = *(*(a)) = **a.
你的 *a 是一个星,而 *a[0] 是 2 个 星,当然不同。
------
*a不应该是返回以a 的值作为地址的那个空间的取值吗 -- 只有 当 a 是1维数组时才是对的。*a 等于 *(a+0) 等于 a[0];

float **array;
是指向指针的指针,可以用来指向2维数组.

如果要用 array[j][i] 表示数组单元,必须预先分配存储单元.

float **a;
int NR=12,NC=10; // 12行10列
int i,j;
// 分配:
a = (float **) malloc(sizeof(float *) * NR);
for (j=0;j<NR;j++){
a[j] = (float *) malloc(sizeof(float) * NC);
};
分配后可用 a[j][i] 表示数组单元.
a[0]...a[11] 指向数组每行的始地址.

回楼上和楼主 **a是指向指针的指针 因为是0分题 我就懒得看了

有两个**吗,没见过


秀山土家族苗族自治县19650805984: c语言中二维数组a[i][j],为什么a=*a? -
驹詹易容: 在C语言中,二者是相同的地址值.所以可以说a=*a.二维数组a定义为a[i][j]时,代表一组数据,有i行j列,共计i*j的元素.这组数据在内存中是连续存放的.而在C语言的使用中,a是二维数组的首地址.*a也就是a[0],是二维数组第一行的首地址. 所以,二者是相同的地址值,即数据a[0][0]的地址值. 也就是说,从值上,a,*a, a[0],&a[0][0]都是相同的值.当时,说a=*a也并不是完全正确的,从类型上,a等同于二维指针,而*a等同于一维指针.二者类型并不相同,只是在一定条件下可以转换.

秀山土家族苗族自治县19650805984: 二维数组定义 **a -
驹詹易容: float **array; 是指向指针的指针,可以用来指向2维数组.如果要用 array[j][i] 表示数组单元,必须预先分配存储单元.float **a; int NR=12,NC=10; // 12行10列 int i,j; // 分配: a = (float **) malloc(sizeof(float *) * NR); for (j=0;ja[j] = (float *) malloc(sizeof(float) * NC); }; 分配后可用 a[j][i] 表示数组单元. a[0]...a[11] 指向数组每行的始地址.

秀山土家族苗族自治县19650805984: 在使用Dev C++的过程中将二维数组定义为a[100][100]可以,但是定义成**a就会报错 -
驹詹易容: 赋个初值初始化一下 如:int **a=NULL;

秀山土家族苗族自治县19650805984: 二维数组a是什么意思 -
驹詹易容: 例如:a[3][3]就是一个二维数组.它包含3个一维数组,每个一维数组有3个元素.

秀山土家族苗族自治县19650805984: 二维数组的定义? -
驹詹易容: 二维数组A[m][n],每个元素的长度为t个字节,设a[p][q]为A的第一个元素,即二维数组的行下标从p到m,列下标从q到n,按“行优先顺序”存储时则元素a[i][j]的地址计算为: LOC(a[i][j]) = LOC(a[p]...

秀山土家族苗族自治县19650805984: 定义二维数组指针 int a[4][5];int *p;p=*a 中,*a中的*是什么意思 -
驹詹易容: a是一个二维数组,换言之是一个由一维数组组成的数组,a中的每个元素都是一个int[5]的数组.*a等价于a[0]表示取a的第一个元素即第一行的那个int[5]数组.然后将这个数组赋给p,等价于将这个数组首元的地址赋给p.

秀山土家族苗族自治县19650805984: **a在C语言中表示a[0]a[0],为什么? -
驹詹易容: 举例说明,如果定义了一个二维数组a[10][10],则a本身代表着这个数组的首地址,其本质就是定义了一个二维指针,a[m][n]与*(*(a+m)+n))表示相同意思,都表示取第m行第n个变量,m和n都取0时,就是问题所示. 建议阅读下csdn上有关指针和数组的博客,有很多解释,这上面的说明还很口语化.

秀山土家族苗族自治县19650805984: c语言关于定义二维数组的问题 -
驹詹易容: 首先你要理解二维数组的真正含义,它的第一维就是一组数据的起始地址,第二维就是某组数据中的某个值.其次,你要知道a[][4]所表达的意思,是指二维数组a的每一维都是由4个元素组成的一维数组.而编译器可以根据你赋给a的初值个数计算...

秀山土家族苗族自治县19650805984: 什么是二维数组啊?它的定义是什么?二维数组指的是两行两列的数组吗 -
驹詹易容: 二维数组就相当于excel表格,可以存储m*n个值,并不只是2*2,比如一个6*5的二维数组,就是5行每行6列,可以存储30个值a[6][5],定义时定义成int a[m][n]或者只定义列int a[][n]

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网