鱼C论坛

 找回密码
 立即注册
查看: 2282|回复: 0

[技术交流] 三维数组地址及地址上值的解惑

[复制链接]
发表于 2020-8-29 15:45:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. int main(void){
  3.     int a = 1;
  4.     int b = 4;
  5.     int c = 33;
  6.     int *x = &a;
  7.     int *y = &b;
  8.     int *z = &c;
  9.     int **k[] = {&x, &y, &z};

  10.     printf("k    = %p\n", k); //等于数组k的首元素的地址
  11.     printf("&k   = %p\n", &k);//和k的值相同,但是含义不同
  12.     printf("k+1  = %p\n", k+1);//数组k含有的3个元素都是指针类型,即char *,所以k+1相当于k向右移动sizeof(char *)个位置,即数组k中第二个元素所在的地址
  13.     printf("&k+1 = %p\n", &k+1);//k和&k的值虽然相同,但是&k相当于数组k的首地址,所以&k+1相当于向右移动3*sizeof(char *)个位置
  14.     printf("\n");
  15.     // 以下打印数组k第二个元素所在的地址
  16.     printf("k+1   = %p\n", k+1);
  17.     printf("&k[1] = %p\n", &k[1]);
  18.     printf("\n");
  19.     // 以下打印数组k第二个元素的值,即指针y所在的地址
  20.     printf("k[1]   = %p\n", k[1]);
  21.     printf("*(k+1) = %p\n", *(k+1));
  22.     printf("&y     = %p\n", &y);
  23.     printf("\n");
  24.     // 以下打印数组k第二个元素的值的值,即y的值,即b所在的地址
  25.     printf("*k[1]   = %p\n", *k[1]);
  26.     printf("k[1][0] = %p\n", k[1][0]);
  27.     printf("**(k+1) = %p\n", **(k+1));
  28.     printf("y       = %p\n", y);
  29.     printf("&b      = %p\n", &b);
  30.     printf("\n");
  31.     // 以下打印数组k第二个元素的值的值的值,即y指向的值,即b
  32.     printf("**k[1]       = %d\n", **k[1]);
  33.     printf("k[1][0][0]   = %d\n", k[1][0][0]);
  34.     printf("***(k+1)     = %d\n", ***(k+1));
  35.     printf("*y           = %d\n", *y);
  36.     printf("b            = %d\n", b);
  37.     return 0;
  38. }
复制代码

[b]运行结果[/b]
  1. k    = 0x7ffee83ac690
  2. &k   = 0x7ffee83ac690
  3. k+1  = 0x7ffee83ac698
  4. &k+1 = 0x7ffee83ac6a8

  5. k+1   = 0x7ffee83ac698
  6. &k[1] = 0x7ffee83ac698

  7. k[1]   = 0x7ffee83ac670
  8. *(k+1) = 0x7ffee83ac670
  9. &y     = 0x7ffee83ac670

  10. *k[1]   = 0x7ffee83ac684
  11. k[1][0] = 0x7ffee83ac684
  12. **(k+1) = 0x7ffee83ac684
  13. y       = 0x7ffee83ac684
  14. &b      = 0x7ffee83ac684

  15. **k[1]       = 4
  16. k[1][0][0]   = 4
  17. ***(k+1)     = 4
  18. *y           = 4
  19. b            = 4
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-14 02:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表