已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/09/21 11:18:51
已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},
有int (*ptr)[3]=a,*p=a[0].问怎样表示a[1][2].a[1][2]应该是6,我的理解应该是*((ptr+1)[2])应该是可以表达的,但是程序运行后结果是10!然后*(*(a+1)+2),是可以表达的,这是为什么?明明取了地址a+1的值再加2怎么还能再当成指针取其地址的值?
有int (*ptr)[3]=a,*p=a[0].问怎样表示a[1][2].a[1][2]应该是6,我的理解应该是*((ptr+1)[2])应该是可以表达的,但是程序运行后结果是10!然后*(*(a+1)+2),是可以表达的,这是为什么?明明取了地址a+1的值再加2怎么还能再当成指针取其地址的值?
int (*ptr)[3]=a这句,将a的首地址赋值给了ptr,ptr表示的是指向一个含有三个Int的数组的指针,
*((ptr+1)[2])等价于*((ptr+1)+2),等价于*(ptr+3),这表示从数组a的首地址向后移动3个单位,每个单位为一个含有3个Int的数组,所以一共向后移动了9个单位,即得出运行结果10!
要想正确表达a[1][2],应该是(*(ptr+1))[2],数组的运算符[ ]比间值运算符*的优先级高,(*(ptr+1))[2]表示a向后移动一个单位即三个Int,此时ptr指向4,再往后移动2个Int指向6.
其实遇到这类问题画内存结构图比较容易理解了
*((ptr+1)[2])等价于*((ptr+1)+2),等价于*(ptr+3),这表示从数组a的首地址向后移动3个单位,每个单位为一个含有3个Int的数组,所以一共向后移动了9个单位,即得出运行结果10!
要想正确表达a[1][2],应该是(*(ptr+1))[2],数组的运算符[ ]比间值运算符*的优先级高,(*(ptr+1))[2]表示a向后移动一个单位即三个Int,此时ptr指向4,再往后移动2个Int指向6.
其实遇到这类问题画内存结构图比较容易理解了
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int **p; p=(int**)a;
已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},
int a[ ][3]={1,2,3,4,5,6,7,8,9,10,11,12};int*p=a;求 *(*(a+2)+
已知int a[] = {1,2,3,4,5,6,7,8,9,10,11,12},*p = a+2;,则值为3的表达式是
#define N 10 main() { int a[N]={1,2,3,4,5,6,7,8,9,10} int i,
设有以下定义:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*ptr)[3]
c语言的问题 int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; int (*p)[
int 原题:若有定义:int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p[3],m;阅读下
main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int *b; b=a;
int main() { int a[9] = {1,2,3,4,5,6,7,8,9}; int b[9] = {1,2
有如下程序,int a[10]={1,2,3,4,5,6,7,8,9,10}; int *p=&a[3],b;b=p[5
10.已知int a[3][3]={ 1,2,3,4,5,6,7,8,9};,则*(*(a+2)+1) 的值是_____