数组的各种操作

1.数组初始化
数据类型 + 数组名[元素个数] = {数组元素};
如:int arr[10] = {0};这条语句翻译过来就是创建了一个数组,它里面有10个整型元素,第一个元素赋值为0,后面的9个元素没有赋值,默认为0;当然这只是一种最基本的初始化方法,还有以下三种方法可以初始化数组。
①strcpy;
char arr[10];
strcpy(arr, "123456");
②for循环
int i = 0;
int arr[10];
for (i = 0; i < 10; i++)
{
arr[i] = i;
}
③while循环
char arr[10];
int i = 0;
while((ch = getchar()) != EOF)
{
arr[i] = ch;
Ii++;
}

2.关于sizeof与数组之间的运算
只有在以下两种情况中,数组名才代表整个数组:
①数组名 单独放在sizeof里面时,如sizeof(arr)。
②数组名放在取地址符后面时,如&arr
除此之外数组名只代表数组首元素地址。

int a[4] = {0,1,2,3};
sizeof(a) =16            数组名单独在sizeof内,表示整个数组,一个int型元素4个字节,4*4=16。
sizeof(a+0) =4          此处不符合情况①②,那表示的就是首元素地址,+0,那还是首元素地 址,存地址的指针变量大小是四个字节。
sizeof(*a) =4                  此处a代表首元素地址,而*a代表首元素,这就是求整型元素的大小。
sizeof(a+1) =4               首元素地址加1,那就是第二个元素的地址,还是地址。
sizeof(a[1]) =4               a[1]数组中的第一个元素,整型数据4字节。
sizeof(&a) =4                 此处&a就代表整个数组的地址,指针变量还是4字节。
sizeof(*&a) = 16            &a是数组a的地址,那*&a就代表整个数组了,所以是16字节。
sizeof(&a+1) =4             此处&a代表的是数组a的地址(整个数组),虽然数组地址和数组首元素地址的值是一样的,但代表的意义完全不相同。这里(&a+1),是向后移动16字节(数组a总大小),那么(&a+1)代表的是数组a尾元素后一位的那个元素地址。
sizeof(&a[0]) =4             取第一个元素地址
sizeof(&a[0]+1) = 4        第二个元素地址。

3.数组作为形参时
int print(int *p, int size)
{
int i = 0;
for (i = 0; i < size; i++)
{
printf("%d ", *(p + i));
}
return 0;
}
int main()
{
int arr []= {0,2,4,6,8};
int sz = 5;
print(arr, 5);
}
此处arr作为形参传给print函数,但其实只是把arr的首地址传过去了。

4. 数组名a作为左值和右值的区别
(1) 数组名a作为右值时代表的是数组首元素的地址,而不是数组的地址,
(2) 数组名a不能作为左值! 编译器认为a作为左值时代表的是首元素的地址,但这个地址开始的是一整个内存,我们可以把数组单个元素如a[i]作为左值,但不能把一个数组当成一个整体去直接访问。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值