若已有定义和说明:int a[2][3],(*p)[3];p=a;,则对a数组元素地址正确引用的是( )。
int a[3][6] = { 1,2,3,4,5,6,7,8,9,10,11,12 };//与下面等同 int a[3][6] = { {1,2,3,4,5,6}, {7,8,9,10,11,12}, {0,0,0,0,0,0}, }; //a:代表第0行的行地址,与第0行首元素地址的值相同,但步长不一样 //a+i <=> &a[i]:代表第i行的行地址 //*(a+i) <=> a[i]:代表第i行的首元素地址;a+i为第i行行地址,解引用为第i行首元素地址 //*(a+i)+j: <=> &a[i][j]:代表第i行第j列元素的地址 //*(*(a+i)+j) <=> a[i][j]:第i行第j列元素的值 cout << *(a[0] + 1) << endl;//2 cout << *((*a)+1)<< endl;//2 cout << (*a[1] + 1) << endl;//8 cout << *(*(a + 1) + 1) << endl;//8 //a代表首行地址,*a解引用为该行首元素地址,**a再解引用为元素值 //a+1为下一行的行地址,解引用为该行首元素地址,再解引用为元素值 //‘*’解引用的优先级高于‘+’号 //*a+1为先解引用得到首行首元素地址,首元素地址+1为首行第2个元素的地址 //*(a+1)为先让首行地址加1,得到下一行行地址,再解引用为下一行首元素的地址 cout << a << " " << *a << " " << **a << endl;//a与*a值相等,但含义不一样,一个为行地址,一个为元素地址 cout << *a + 1/*首行第2个元素的地址*/ << " " << *(a + 1)/*下一行首元素的地址*/ << endl; cout << *(*a + 1)/*2*/ << " " << *(*(a + 1))/*7*/ << endl;
若已有定义和说明:int a[2][3],(*p)[3];p=a;,则对a数组元素地址正确引用的是( )。
*(p=2)
(p+1)+2
p[1]+1
p[2]