学习心得——数组作为函数参数后sizeof获取不到数组在内存中所占字节数的问题
帮同学解决了一个问题,自己从中也学到了东西,记下学习心得~~~
问题重现:
数组通过函数传递后为什么获取不到数组在内存中占用地址的长度?
在VS中编写如下的测试代码:
#include "stdafx.h"
void test(int b[])
{
int mm, nn;
printf("%p", "%p", "%p
", b, &b[0], &b);
printf("
");
mm = sizeof(b);
nn = sizeof(b[0]);
int length_call = mm / nn;
for (int i = 0; i < length_call; i++)
{
printf("%d
", b[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[3] = {2,5,8};
int m, n;
printf("%p", "%p", "%p
", a, &a[0], &a);
printf("
");
m = sizeof(a);
n = sizeof(a[0]);
int length = m / n;
// int length = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < length;i++)
{
printf("%d
", a[i]);
}
printf("调用函数的输出结果:
");
test(a);
return 0;
}
输出结果:
(1)三个参数分别是数组、指针、数组指针;
、
(2)m和n分别为整形数组和整形变量在内存中占用的字节数;
(3)传入参数为数组;
(4)进入被调函数;
(5)三个参数分别为:指向传入数组首地址的指针、数组第一个元素的地址(即指针)、指针的地址;
(6)mm和nn分别为整形指针和整形变量在内存中占用的字节数;
程序自然只能输出2咯~~
~~~~~~~~~~欢迎拍砖


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
