|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这是代码:
#include <stdio.h>
int main()
{
int a[2][3]={1,2,3,4,5,6};
printf("a的地址:%p\na[0]的地址:%p\na[0][0]的地址:%p\n\n",a,a[0],a[0][0]);
printf("a的地址:%d\na[0]的地址:%d\na[0][0]的地址:%d\n\n",&a,&a[0],&a[0][0]);
printf("a+1:\n值:%d\na+1地址:%p\na[0]+1值:%d\na[0]+1地址:%p\na[0][0]+1值:%d\na[0][0]+1地址:%p\n\n",a+1,a+1,a[0]+1,a[0]+1,a[0][0]+1,a[0][0]+1);
printf("*(a+1)值:%d\na+1地址:%p\n*(a[0]+1)值:%d\na[0]+1地址:%p\na[0][0]+1值:%d\na[0][0]+1地址:%p\n\n",*(a+1),a+1,*(a[0]+1),a[0]+1,a[0][0]+1,a[0][0]+1);
printf("*(*(a+1))值:%d\na+1地址:%p\n*(a[0]+1)值:%d\na[0]+1地址:%p\na[0][0]+1值:%d\na[0][0]+1地址:%p\n\n",*(*(a+1)),a+1,*(a[0]+1),a[0]+1,a[0][0]+1,a[0][0]+1);
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
printf("%p,%d\n",a[i][j],&a[i][j]);
}
}
这是终端输出:
a的地址:000000000062FE00
a[0]的地址:000000000062FE00
a[0][0]的地址:0000000000000001
a的地址:6487552
a[0]的地址:6487552
a[0][0]的地址:6487552
a+1:
值:6487564
a+1地址:000000000062FE0C
a[0]+1值:6487556
a[0]+1地址:000000000062FE04
a[0][0]+1值:2
a[0][0]+1地址:0000000000000002
*(a+1)值:6487564
a+1地址:000000000062FE0C
*(a[0]+1)值:2
a[0]+1地址:000000000062FE04
a[0][0]+1值:2
a[0][0]+1地址:0000000000000002
*(*(a+1))值:4
a+1地址:000000000062FE0C
*(a[0]+1)值:2
a[0]+1地址:000000000062FE04
a[0][0]+1值:2
a[0][0]+1地址:0000000000000002
0000000000000001,6487552
0000000000000002,6487556
0000000000000003,6487560
0000000000000004,6487564
0000000000000005,6487568
0000000000000006,6487572
想问一下:
1.在第一次printf和第二次printf中为什么用%p输出a[0][0]的结果和用%d输出&a[0][0]的结果是不一样的?(这不是进制转换的问题);
2."a+1"这个指针的地址是多少,真的是000000000062FE0C,但是这个不是a[2][1]=4的十六进制地址吗?用%d输出&a+1时系统提示了错误:lvalue required as unary '&' operand,不知道该怎么弄;
谢谢大家的解答!!!
|
|