C语言传递数组到函数的一个发现

今天在调试程序的时候突然发现,将数组首地址和数组长度做为参数传递给函数时,将数组长度作为下标访问数组, 得到的是数组的长度。

环境:

操作系统: Centos 5.6

编译工具:gcc 4.1.2

代码如下:

#include <stdio.h>

static void fun(int *arr, int len)
{
	printf("%d\n", arr[len]);
}

int main(void)
{
	int a[] = { 1, 2, 3 };
	int len = sizeof(a) / sizeof(int);
	fun(a, len);
	return 0;
}



输出结果为3.

进一步测试发现,double类型的数组得到的结果是3059700, char类型的数组得到的是1.如果越过更多,则double之后的结果都是1, char类型之后都是0,int类型之后则是无序的数。测试代码如下:

#include <stdio.h>

/*
0: int
1: char
2: double
   */
static void fun(void *arr, int len, int type)
{
	int i;
	switch(type) {
		case 0:
			printf("integer array: %d\n", ((int *)arr)[len]);
			for(i = 1; i < 100; ++i)
				printf("integer array: %d\n", ((int *)arr)[len + i]);
			break;
		case 1:
			printf("character array: %d\n", ((char *)arr)[len]);
			for(i = 1; i < 100; ++i) 
				printf("character array: %d\n", ((char *)arr)[len + 1]);
			break;
		case 2:
			printf("double array: %d\n", ((double *)arr)[len]);
			for(i = 1; i < 100; ++i) 
				printf("double array: %d\n", ((double *)arr)[len + 1]);
			break;
		default:
			break;
	}
}

int main(void)
{
	/* integer array */
	int int_arr[] = {1, 3, 4};
	int int_len = sizeof(int_arr) / sizeof(int);
	fun(int_arr, int_len, 0);
	/* character array */
	char char_arr[] = { 'a', 'b', 'c' };
	int char_len = sizeof(char_arr) / sizeof(char);
	fun(char_arr, char_len, 1);
	/* double array */
	double double_arr[] = { 1.1, 2.1, 3.3 };
	int double_len = sizeof(double_arr) / sizeof(double);
	fun(double_arr, double_len, 2);
	return 0;
}
测试结果如图所示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值