第1个回答 2008-11-14
p是列地址,如果声明为(*P)[2]就是行地址了.你如果能把行地址和列地址搞清楚,什么指针就都明白了.
再说了.你那样声明P本来就是错误的,二维数组的指针和一维数组的指针是不同的.
第2个回答 2008-11-14
p 是一指向数组a的指针
*p 就是a[0][0]的值1
p+1 是元素a[0][1]的地址
*(p+1) 是元素a[0][1]的值
第3个回答 2008-11-14
int *p=(int *)a; /*实际上经历了这样的隐含类型转换*/
p+1 == &a[0][1]; /*即a的第二个元素,值为2*/
-46==&a[0][1]; /*即a[][]的起始地址+4*/
第4个回答 2008-11-14
#include <stdio.h>
void main()
{
int a[2][2]={1,2,3,4},*p=*a;
printf("%d %d %d\n",p+1,*(p+1),&a[0][1]);
}
int *p=a要出错,应该改成 int*p=*a;
p+1是2的地址
1310580 2 1310580
Press any key to continue
第5个回答 2008-11-14
*(p+1)所指的是a[0][1] 含的值,即是2。
而p+1是表示a[0][1]的地址。