嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2016-10-23 910 次浏览 标签 : C

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

#include <stdio.h>

int func(int arr[5])
{
	printf("func sizeof(arr) id %lu\n", sizeof(arr));

	for (int i = 0; i < 5; ++i)
	{
		*(arr+i) = i;
	}

	return 0;
}

int main(int argc, char const *argv[])
{
	int arr[5];
	printf("main sizeof(arr) id %lu\n", sizeof(arr));
	func(arr);

	for (int i = 0; i < 5; ++i)
	{
		printf("%d\n", *(arr+i));
	}
	return 0;
}

编译有警告

zhoumengkang@zhoumengkangdeiMac:~/Downloads$ gcc bb.c -o out
bb.c:5:44: warning: sizeof on array function parameter will return size of 'int *' instead of 'int [5]' [-Wsizeof-array-argument]
        printf("func sizeof(arr) id %lu\n", sizeof(arr));
                                                  ^
bb.c:3:14: note: declared here
int func(int arr[5])
             ^
1 warning generated.

不过可以运行

zhoumengkang@zhoumengkangdeiMac:~/Downloads$ ./out
main sizeof(arr) id 20
func sizeof(arr) id 8
0
1
2
3
4

发现实际在func中接受都的arr实际是一个指针,因为我的电脑是64位,所以长度为8字节,而main函数里面是分配的5个int,所以占的内存为20字节。

修改下func的参数

int func(int *arr)
{
	...
}

则不报错了。

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表