牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2016-06-18 投稿人: 浏览次数:187

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

问题重现:

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


在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咯~~

附:Sizeof关键字的使用总结


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

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