|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<stdio.h>
- int main(void){
- int a = 1;
- int b = 4;
- int c = 33;
- int *x = &a;
- int *y = &b;
- int *z = &c;
- int **k[] = {&x, &y, &z};
- printf("k = %p\n", k); //等于数组k的首元素的地址
- printf("&k = %p\n", &k);//和k的值相同,但是含义不同
- printf("k+1 = %p\n", k+1);//数组k含有的3个元素都是指针类型,即char *,所以k+1相当于k向右移动sizeof(char *)个位置,即数组k中第二个元素所在的地址
- printf("&k+1 = %p\n", &k+1);//k和&k的值虽然相同,但是&k相当于数组k的首地址,所以&k+1相当于向右移动3*sizeof(char *)个位置
- printf("\n");
- // 以下打印数组k第二个元素所在的地址
- printf("k+1 = %p\n", k+1);
- printf("&k[1] = %p\n", &k[1]);
- printf("\n");
- // 以下打印数组k第二个元素的值,即指针y所在的地址
- printf("k[1] = %p\n", k[1]);
- printf("*(k+1) = %p\n", *(k+1));
- printf("&y = %p\n", &y);
- printf("\n");
- // 以下打印数组k第二个元素的值的值,即y的值,即b所在的地址
- printf("*k[1] = %p\n", *k[1]);
- printf("k[1][0] = %p\n", k[1][0]);
- printf("**(k+1) = %p\n", **(k+1));
- printf("y = %p\n", y);
- printf("&b = %p\n", &b);
- printf("\n");
- // 以下打印数组k第二个元素的值的值的值,即y指向的值,即b
- printf("**k[1] = %d\n", **k[1]);
- printf("k[1][0][0] = %d\n", k[1][0][0]);
- printf("***(k+1) = %d\n", ***(k+1));
- printf("*y = %d\n", *y);
- printf("b = %d\n", b);
- return 0;
- }
复制代码
[b]运行结果[/b]
- k = 0x7ffee83ac690
- &k = 0x7ffee83ac690
- k+1 = 0x7ffee83ac698
- &k+1 = 0x7ffee83ac6a8
- k+1 = 0x7ffee83ac698
- &k[1] = 0x7ffee83ac698
- k[1] = 0x7ffee83ac670
- *(k+1) = 0x7ffee83ac670
- &y = 0x7ffee83ac670
- *k[1] = 0x7ffee83ac684
- k[1][0] = 0x7ffee83ac684
- **(k+1) = 0x7ffee83ac684
- y = 0x7ffee83ac684
- &b = 0x7ffee83ac684
- **k[1] = 4
- k[1][0][0] = 4
- ***(k+1) = 4
- *y = 4
- b = 4
复制代码 |
|