当前位置:   article > 正文

指向变量所占字节问题_指向动态变量的指针占字节

指向动态变量的指针占字节

        今天在刷题的时候遇到了一道这么一道题:

设有如下程序:

  1. #include<stdio.h>
  2. main()
  3. {
  4. int **k, *j,i=100;
  5. j=&i;k=&j;
  6. printf("%d\n",**k);
  7. }

A、运行错误        B、100        C、i的地址        D、j的地址

答案     (左键勾选查看答案)
j=&i,j的值就是i的地址,*j=100,

再将j的地址赋给k,这时*k=j,

那么,**k=*j,而*j=100,所以**k=100,最后的打印结果应当为100。

看到D选项的时候我意识到一个问题,如果我把他们地址全打印出来会是什么样?

代码实现:

  1. #include <stdio.h>
  2. main()
  3. {
  4. int **k, *j;
  5. int i=100;
  6. j=&i;k=&j;
  7. printf("%d\n",**k);
  8. printf("%d\n",&k);
  9. printf("%d\n",&j);
  10. printf("%d\n",&i);
  11. }


结果:

100
6422040
6422032
6422028

Process returned 0 (0x0)   execution time : 0.014 s
Press any key to continue.

        令我疑惑的是,k的地址是从6422040开始,而不是6422036。int型占4个字节。自然K应该也是4个字节。是地址分配问题?还是说指针所占字节和指向的类型变量无关?

为了寻求真相,我使用了sizeof(),括号中写入变量名,返回值为该变量所占字节数。

代码实现:

  1. #include <stdio.h>
  2. main()
  3. {
  4. int **k, *j;
  5. int i=100;
  6. j=&i;k=&j;
  7. printf("%d\n",sizeof(k));
  8. printf("%d\n",sizeof(j));
  9. printf("%d\n",sizeof(i));
  10. }

结果:

100
8
8
4

Process returned 0 (0x0)   execution time : 0.019 s
Press any key to continue.

k指向的是指针,j指向的是整型。可以得出,指针所占字节数为8个字节。和所指向变量的数据类型无关。在查阅资料中还发现,因为我的测试环境是64位,占8个字节。而32和16环境下,指针分别为4字节和2字节。
 

总结         

在64位下,指针指向任何类型的变量都是占用8个字节。32和16环境下,指针分别为4字节和2字节。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/392523
推荐阅读
相关标签
  

闽ICP备14008679号