苹果手机怎么下载hga039 苹果手机怎么下载hga039 苹果手机怎么下载hga039

不要混淆 sizeof(array name) 和 sizeof(pointer)

当我们在C语言编程中一个一个地输出数组的元素时,最常用的实现就是使用for循环,很简单。例如,类似于以下的 C 程序代码片段:

for(i = 0; i< length; i++)
{
printf(“数组元素是%d”, 数组[i]);
}

使用下标索引变量 i 遍历整个 C 程序数组数组名,length 是数组的长度。当然,长度必须提前计算。计算的方法有很多种,很多朋友都会想到用sizeof来计算。不过sizeof也不错,但要睁大眼睛小心误用。如果您不相信,请继续阅读。

让我们先看看传统的方法。C程序代码如下:

#include "stdio.h"
int main(void) 
{
	int number[5] = {1,2,3,4,5};
	int index = 0;
	printf("数组的元素分别是:\n");
	for(index = 0;index < 5; index++)
	{
		printf("%d ", number[index]);
	}
	printf("\n");
	
	return 0;
}

最简单的方法就是把C语言数组的长度写死,然后用循环一个一个的输出。该过程清晰易懂,结果是:

数组对象 对象数组_初始化数组和清空数组_数组名

结果也清晰易懂。

有的朋友会心血来潮,何乐而不为:

#include "stdio.h"
int main(void) 
{
	int number[5] = {1,2,3,4,5};
	int index = 0;
	int *p = &number[0];
	printf("数组的长度是: %d\n", sizeof(p));
	printf("数组的元素分别是:\n");
	for(index = 0;index < sizeof(p); index++)
	{
		printf("%d ", number[index]);
	}
	printf("\n");
	
	return 0;
}

加上AC语言指针变量p,指针变量p的初值为数组第一个元素的地址。有的朋友尝试用sizeof(p)来获取数组的长度,是错误的,请看结果:

数组名_初始化数组和清空数组_数组对象 对象数组

从结果可以看出,sizeof(p)实际上是计算指针变量p的大小。在 32 位系统上数组名,无论指针 p 指向整数数据、字符数据、短数据、长数据等,指针 p 本身占用的内存字节数都是 4。即使用大小4字节来存储变量p的值。

我也看到一些朋友这样使用sizeof。C程序代码如下:

#include "stdio.h"
void print(int number[5]) 
{ 
 int index = 0; ; 
	printf("函数print中,数组长度是: %d ", sizeof(number));
	printf("函数中数组的元素分别是:\n");
 for(index = 0; index < sizeof(number) / sizeof(number[0]); index++)
 {
		printf("%d ", number[index]);
 } 
	printf("\n");
} 
int main(void) 
{
	int number[5] = {1,2,3,4,5};
	print(number);
	
	return 0;
}

这次再次修改C程序代码,将数组名编号传递给函数print,print函数的形参看起来像一个数组。运行的结果是

初始化数组和清空数组_数组名_数组对象 对象数组

诺诺,运行结果不是预期的结果。其实C语言函数print的形参看起来像一个数组,所以有的朋友认为是数组,所以使用sizeof来计算数组的长度;实际情况是print函数的参数还是指针,指针,A指针,没错,是C语言指针,所以sizeof(number)还是计算指针的大小。初学者一定要记住!