初识C语言==>什么是数组名?它代表什么含义?

数组名是什么?

文章目录

  • 数组名是什么?
    • 数组名是数组首元素的地址
    • 代码示例1 sz
    • 代码示例2
  • 总结

在我们敲代码的过程中,经常要遇到使用数组的地方

提到使用数组,就离不开数组名

int arr[10] = {
      0 };//arr就是数组名

同时我们也经常要用到使用sizeof计算数组元素个数的情况

int sz = sizeof(arr) / sizeof(arr[0]);

所以了解数组名的概念对于我们的c语言学习十分重要

数组名是数组首元素的地址

如题,这个概念在我们创建自定义函数的时候尤为重要

最经常犯的错误就是在自定义函数内部求主函数中arr数组的元素个数

void sp1(int arr[])
{
     
	int sz = sizeof(arr) / sizeof(arr[0]);//放在此处sz计算为1,err
    for (i = 0; i < sz; i++)
}

这时从主函数传过来的arr只有首元素的地址,使用sizeof计算得到的sz只有1

对后续要进行的操作如for循环中的 i

这是因为int arr传到自定义函数中的是形参

形参arr是无法计算内部元素大小的

(具体的代码示例将在下篇博客的冒泡排序中展示)

代码示例1 sz

我们可以用简单的代码来了解不同arr的书写方式得到的结果

#include 
int main()
{
     
    int arr[10] = {
      0 };
	int sz = sizeof(arr);//数组名表示整个数组
	printf("%d\n", sz);
	return 0;
}

可以看到结果是40,这表明数组中10个元素所占用的字节是40

在这个代码里面,arr表示的是整个数组,sizeof求的自然也是整个数组所占字节的长度

image-20210825120557626

我们可以用下面这串代码得到数组内的元素个数,结果为10

#include 
int main()
{
     
    int arr[10] = {
      0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
	printf("%d\n", sz);
	return 0;
}

初识C语言==>什么是数组名?它代表什么含义?_第1张图片

代码示例2

下面这串代码中,我们使用三种不同的方式键入arr

#include 
int main()
{
     
	int arr[10] = {
      0 };
	printf("%p\n", &arr);//1
	printf("%p\n", arr);//2
	printf("%p\n", &arr[0]);//3
	return 0;
}

初识C语言==>什么是数组名?它代表什么含义?_第2张图片

我们会发现三次打印的结果是一样的

  • &arr取出的是整个数组的地址
  • arr作为数组名–>数组首元素的地址
  • &arr[0]取出的是数组首元素的地址

但实际上三者的本质是完全不同的

可以用+1的方式来找出它们的不同之处

int main()
{
     
	int arr[10] = {
      0 };
	printf("%p\n", &arr);//1  &arr取出的是数组的地址
	printf("%p\n", &arr+1);

	printf("%p\n", arr);//2
	printf("%p\n", arr+1);
	return 0;
}

初识C语言==>什么是数组名?它代表什么含义?_第3张图片

可以看到&arr+1之后的结果和arr+1的结果是不一样的

初识C语言==>什么是数组名?它代表什么含义?_第4张图片
初识C语言==>什么是数组名?它代表什么含义?_第5张图片

  • &arr+1与&arr之间相差40
  • arr+1与arr之间相差4

这是因为&arr代表的整个数组的地址,加1即跳过了整个数组

而arr只代表首元素地址,加1表示第二位的地址

总结

c语言中有很多这样的小知识点,需要我们记录并加以了解

只有理解了为什么,我们才能在后续的学习、代码创作中写出更好的代码

点个赞再走呗,求求了!

你可能感兴趣的:(初识C语言-新人,c语言)