一起talk C栗子吧(第九十 一回:C语言实例--数组的大小)
程序员文章站
2024-01-20 10:55:46
各位看官们,大家好,上一回中咱们说的是使用管道进行进程间通信的例子,这一回咱们说的例子是:数组的大小。闲话休提,言归正转。让我们一起talk C栗子吧!
最近有看官遇到了关于数组...
各位看官们,大家好,上一回中咱们说的是使用管道进行进程间通信的例子,这一回咱们说的例子是:数组的大小。闲话休提,言归正转。让我们一起talk C栗子吧!
最近有看官遇到了关于数组大小的问题,我在这里专门做一个说明,希望对大家有帮助。
通常情况下,计算数组大小时都是使用sizeof操作符,于是不加思考就直接使用。有的时候,在程序中想使用数组中元素的个数,结果也使用sizeof去计算,这时就会出问题,但是又不知道问题出在哪里。其实是对sizeof操作符理解不深。
我们先说明一下两个概念:数组的大小和数组中元素的个数。
数组大小:指数组占用的内存空间大小。 数组中元素的个数:指数组中元素的数量。大家首先要知道sizeof操作符计算出的是内存空间的大小。当我们使用sizeof对数组进行操作时,计算出的是数组占用的内存空间大小,也就是通常说的数组大小。我们举个例子:
sizeof(int)的结果是4(与编译器和具体的机器有关)表示int类型的值占用4个字节的内存空间。 sizeof(array)的结果是8,表示数组array占用8个字节的内存空间。
明白上面的例子后,我们可以使用整个数组占用内存空间的大小除以数组中单个元素占用内存空间的大小,得到的结果就是数组中元素的个数。接下来我们举例子进行说明:
#include #include #define SIZE 7 typedef struct person { int age; char *name; char flag; }Person; int main() { int array1[SIZE]; char array2[SIZE]; Person array3[SIZE]; printf("the size of array1 is %d ,and it have %d elements \n",sizeof(array1),sizeof(array1)/sizeof(int)); printf("the size of array2 is %d ,and it have %d elements \n",sizeof(array2),sizeof(array2)/sizeof(char)); printf("the size of array2 is %d \n",strlen(array2)); printf("the size of array3 is %d ,and it have %d elements \n",sizeof(array3),sizeof(array3)/sizeof(Person)); return 0; }
编译上面的程序并且运行,可以得到下面的结果:
the size of array1 is 28 ,and it have 7 elements //int 类型的数组 the size of array2 is 7 ,and it have 7 elements //char类型的数组 the size of array2 is 7 //char类型的数组当作字符串处理 the size of array3 is 84 ,and it have 7 elements //结构体类型的数组
看官们,我们在上面的例子中使用了三种类型的数组,大家可以看到不同类型的数组占用的内存空间是不同的,但是数组中元素的数量是相同的,因为我们在定义数组时使用了一个宏。
另外,char类型的数组大小和数组中元素的个数相同,因为在我的电脑上char类型的变量占用一个字节的内存空间。此外,该类型的数组也可能当作字符串来处理,这时使用字符串函数strlen也可以得出数组的大小。
看官们,在编写程序的时候,一定不要把数组大小和数组中元素的个数混淆。它们是两个不同的概念,而且计算方法也不相同。
如果想知道数组的大小,那么直接使用sizeof对数组进行操作就可以。如果想使用数组中元素的个数,那么需要使用我们在上面例子介绍过的除法操作。各位看官,关于数组大小的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 .
推荐阅读
-
一起talk C栗子吧(第一百八十二回:C语言实例--在printf函数中设置输出宽度一)
-
一起talk C栗子吧(第一百一十六回:C语言实例--线程同步之互斥量二)
-
一起talk C栗子吧(第一百一十七回:C语言实例--线程死锁一)
-
一起talk C栗子吧(第一百八十三回:C语言实例--在printf函数中设置输出宽度二)
-
一起talk C栗子吧(第一百八十四回:C语言实例--在printf函数中设置输出宽度三)
-
一起talk C栗子吧(第一百九十六回:C语言实例--DIY less命令五 )
-
一起talk C栗子吧(第一百六十二回:C语言实例--套接字知识体系图)
-
一起talk C栗子吧( 第一百四十回:C语言实例--文件操作:基于文件描述符三)
-
一起talk C栗子吧(第一百四十三回:C语言实例--文件操作:基于文件指针三)
-
一起talk C栗子吧(第一百三十九回:C语言实例--文件操作:基于文件描述符二)