关于数组,部分引用《C语言深度剖析》

本文详细解释了数组和指针的基本概念,包括数组初始化、数组名与指针的区别、数组和指针的声明与定义等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们定义一个数组:

int[5]={1,2,3,4,5};

对于这样的数组的初始化,我们只在定义的时候初始化,而不能以a[5]={1,2,3,4,5};初始化形式的初始化;当我们定义一个数组时,编译器根据我们制定的类型和大小,为数组开辟一块空间,数组名为a。sizeof(a)=20,sizeof(a[0])=4,那么sizeof(a[5])编译器会不会报错呢?首先sizeof()是关键字,不是函数。关键字在编译的时候求值,函数求值在运行之后,所以这里不会真的访问a[5]。

1.关于&a[0]与&a的区别:打个比方吧,好比江苏省政府跟南京市政府都在南京,地址都是一样的,但是很显然管辖范围不一样的啊!

2.当数组名a作为右值时,代表数组首元素的首地址,而不是数组的首地址。数组名a不能做为左值。编译器会以为a代表数组首元素的首地址,而已这个地址开始的是一块内存,我们只能访问数组的某个元素,不能访问整块内存。

3.指针和数组的区别:其实他们之间没有什么关系。指针在32位机,不管是什么类型,大小为四个字节;而数组的大小根据类型长度决定。访问数组可以使用指针*p++,或者下标p[i],或者数组首地址加偏移量*(a+i)。

4.a和&a的区别:a代表数组首元素的地址也就是a[0]地址,a+1也就是a[1]的地址。而&a表示数组的地址&a+1表示下一个数组的首地址。

5.指针和数组的声明与定义:定义为数组,声明为指针;定义为指针,声明为数组;这两种都是不对的。下面举个例子:

在文件1 中定义了char a[5];

在文件2中声明:extern  char *a(X);extern char a[] or extern char[100](right)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值