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

数组名是什么?

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

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

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<sz来说是无效的

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

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

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

代码示例1 sz

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

#include <stdio.h>
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 <stdio.h>
int main()
{
    int arr[10] = { 0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
	printf("%d\n", sz);
	return 0;
}

image-20210825121049488

代码示例2

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

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

image-20210825121515194

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

  • &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;
}

image-20210825122244924

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

IMG_20210825_131705
在这里插入图片描述

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

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

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

总结

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

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

点个赞再走呗,求求了!

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
C语言中,可以使用数组来存放x和y数组数组是一种数据结构,可以存储一系列相同类型的元素。在C语言中,可以通过声明一个数组来创建一个存放x和y数组的变量。 例如,可以使用以下代码来声明一个存放x和y数组的变量: int x\[10\]; // 声明一个包含10个整数的数组x int y\[5\]; // 声明一个包含5个整数的数组y 在上述代码中,x和y分别是存放x数组和y数组的变量。可以根据需要调整数组的大小。 然后,可以使用循环结构或其他方法来为数组赋值。例如,可以使用以下代码为x数组赋值: for (int i = 0; i < 10; i++) { x\[i\] = i + 1; } 这将为x数组的每个元素赋值为1到10的连续整数。 类似地,可以使用类似的方法为y数组赋值。 请注意,数组的索引从0开始,因此第一个元素的索引为0,第二个元素的索引为1,依此类推。 通过使用数组,可以方便地存储和访问一系列相同类型的数据。 #### 引用[.reference_title] - *1* *2* [[C语言] 初始函数 & 数组](https://blog.csdn.net/weixin_52632755/article/details/120860625)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [c语言学习(初识函数和数组)](https://blog.csdn.net/qq_45358642/article/details/121222728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕雪华年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值