数组的各种操作

来源:互联网 发布:数字化校园软件 编辑:程序博客网 时间:2024/06/06 22:24
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]作为左值,但不能把一个数组当成一个整体去直接访问。



原创粉丝点击