C语言数组(进阶1)

一. 数组的定义以及访问数组方法

例子: 定义了5个int类型的数组  --> int A[5];
       通过下标可以访问数组中每一个成员  
       --> A[0] ->第一个成员   ...  A[4]  -> 第五个成员

二. 数组的赋值

1. 定义同时初始化

--> 使用初始化列表 {依次写每一个成员的值,使用","分开}
例子:
int B[3] = {100,200,300};  -> 编译通过
int B[3] = {100,200};      -> 编译通过,但是没有赋值的成员B[2]=0   --> 只要没赋值完全,剩下的变量都是0
int B[3] = {100,200,300,400}; -> 编译警告
warning:excess elements in array initializer  --> 初始化数组内存越界
int B[] = {100,200,300};  -> 编译通过  --> 虽然看不到下标,但是初始化列表决定下标等于3
int B[] = {100,200,300,400};  --> 编译通过  --> 虽然看不到下标,但是初始化列表决定下标等于4
int B[] = {};   --> 编译通过,但是给数组的成员赋随机值
int B[3] = {};  --> 编译通过,但是给数组的成员赋值0

int B[3] = {100,200};  --> 局部变量  -> B[0]=100,B[1]=200,B[2]=0
int B[3] = {100,200};  --> 全局变量  -> B[0]=100,B[1]=200,B[2]=0

2. 先定义,后初始化

int B[3]; --> 局部变量  --> 全部成员都是随机值
int B[3]; --> 全局变量  --> 全部成员都是0
int B[];  --> 编译出错: error: array size missing in ‘B’

int B[3];  --> 全部都是随机值
B[3] = {100,200,300};  -> 编译出错:error: expected expression before ‘{’ token
B[] = {100,200,300};   -> 编译出错:error: expected expression before ‘]’ token
B = {100,200,300};     -> 编译出错:error: expected expression before ‘{’ token

int B[3];  --> 全部都是随机值
B[0] = 100;
B[1] = 200;
B[2] = 随机值

与下面的例子容易混淆:
int B[3] = {100,200};
B[2] = 0;

总结

1)如果定义的同时初始化,成员使用","分开。
2)赋值的成员必须与数组的数据类型必须匹配  --> 否则编译出错
3)初始化列表个数必须小于/等于数组的长度才不会收到警告
4)定义的同时初始化,初始化列表中如果没有值,或者赋值的值个数小于数组的长度,则剩余没有赋值的变量都是0
5)定义了一个数组,如果数组是全局变量就会赋值为0,如果是局部是随机值。
6)如果先定义了数组,则就不能整体赋值,只能单个赋值了!

三. 研究数组名字


1. 数组名作用于sizeof()时

例子:int A[5] = {100,200,300};  
在内存空间连续申请20个字节,使用变量A间接访问这片内存空间,第一个元素赋值100,第二个元素赋值200,第三个元素赋值300,剩余元素赋值为0。
计算A代表的内存空间是多少?  --> sizeof()

int a;  -> a代表这个int的4个字节  --> sizeof(a);  -> 就可以计算a代表的内存空间是多少  ->4
int A[5];  ---> sizeof(A) = 20

结论: 当数组作用于sizeof(),A就是代表数组的名字。

2. 数组名不作用于sizeof()时

在内存空间打印指针地址:%p
printf("A = %p\n",A);  --> A=0xbfbd5cfc
printf("&A[0] = %p\n",&A[0]);  --> &A[0]=0xbfbd5cfc

结论:数组名就等价于该数组首元素的地址  --> A = &A[0]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值