|
5鱼币
题目,输出二维数组元素的值
- #include <stdio.h>
- void main ()
- {
- static int a[3][4]={{2,4,6,8},{10,12,14,16},{18,20,22,24}};
- int (*ptr)[4];
- int i,j;
- ptr=a;
- for(i=0;i<3;i++)
- {
- for(j=0;j<4;j++)
- printf("%4d",*(*(ptr+i)+j));
- printf("\n");
- }
- }
复制代码
问题:二维数组a[3][4]里面a,a[0],&a[0],*a,&a[0][0]这五个值不是一样的吗,比如说首地址a为2000,那么这五个是不是都等于2000,
第一个问题是这五个中区分行地址和列地址是依据什么来分的?
第二个问题是
既然这五个值相等,那么我换成ptr=a[0];或ptr=*a;或ptr=&a[0][0];会出现这样的错误error C2440: '=' : cannot convert from 'int *' to 'int (*)[4]'
但换成ptr=&a[0];又可以是怎么回事?
第三个问题:书上说“指向整形变量的指针变量ptr只能指向a[i],*(a+i),&a[i][0]等指向列的地址,而不能指向a+i,&a[i]等指向行的地址”我自己试了只有
ptr=a;和ptr=&a[0]可以,这不都是指向行的地址吗,怎么跟书上说的刚好相反?求各位解答,麻烦详细点,新人不太懂
对,没错
值是相同的,但是类型不一样
ptr的类型是int (*)[4]
&a[0][0]的类型是 int *
值相同,但是类型不一样
int a = 123;
int b = 123.0;
值相同,但是类型不一样
“这五个中区分行地址和列地址是依据什么来分的”
类型,类型不一样
|
最佳答案
查看完整内容
对,没错
值是相同的,但是类型不一样
ptr的类型是int (*)[4]
&a[0][0]的类型是 int *
值相同,但是类型不一样
int a = 123;
int b = 123.0;
值相同,但是类型不一样
“这五个中区分行地址和列地址是依据什么来分的”
类型,类型不一样
|