学习心得——数组作为函数参数后sizeof获取不到数组在内存中所占字节数的问题

来源:互联网 发布:中国联通网络测速 编辑:程序博客网 时间:2024/04/30 23:08

转自:http://blog.csdn.net/sinat_20265495/article/details/51706355

帮同学解决了一个问题,自己从中也学到了东西,记下学习心得~~~

问题重现:

数组通过函数传递后为什么获取不到数组在内存中占用地址的长度?


在VS中编写如下的测试代码:

[cpp] view plain copy
 print?
  1. #include "stdafx.h"  
  2.   
  3. void test(int b[])  
  4. {  
  5.     int mm, nn;  
  6.     printf("%p""%p""%p\n", b, &b[0], &b);  
  7.     printf("\n");  
  8.     mm = sizeof(b);  
  9.     nn = sizeof(b[0]);  
  10.     int length_call = mm / nn;  
  11.     for (int i = 0; i < length_call; i++)  
  12.     {  
  13.         printf("%d\n", b[i]);  
  14.     }  
  15. }  
  16.   
  17. int _tmain(int argc, _TCHAR* argv[])  
  18. {  
  19.     int a[3] = {2,5,8};  
  20.     int m, n;  
  21.     printf("%p""%p""%p\n", a, &a[0], &a);  
  22.     printf("\n");  
  23.   
  24.     m = sizeof(a);  
  25.     n = sizeof(a[0]);  
  26.     int length = m / n;  
  27.   
  28. //  int length = sizeof(a) / sizeof(a[0]);  
  29.     for (int i = 0; i < length;i++)  
  30.     {  
  31.         printf("%d\n", a[i]);  
  32.     }  
  33.   
  34.     printf("调用函数的输出结果:\n");  
  35.     test(a);  
  36.     return 0;  
  37. }  

输出结果:


通过调试过程中参数的变化理解了数组传参的本质:

(1)三个参数分别是数组、指针、数组指针;


(2)m和n分别为整形数组和整形变量在内存中占用的字节数;


(3)传入参数为数组;



(4)进入被调函数;



(5)三个参数分别为:指向传入数组首地址的指针、数组第一个元素的地址(即指针)、指针的地址;



(6)mm和nn分别为整形指针(不再是数组)和整形变量在内存中占用的字节数;



程序自然只能输出2咯~~

附:Sizeof关键字的使用总结


~~~~~~~~~~欢迎拍砖害羞害羞害羞


阅读全文
0 0
原创粉丝点击