1、初始化
1.1 整体初始化
(1)代码1
#include <stdio.h>
void main(){
int arr[12];
for(int i=0;i<12;++i){
printf("%d ",arr[i]);
}
}
(2)代码2
#include <stdio.h>
void main(){
int arr[12] = {
0};
for(int i=0;i<12;++i){
printf("%d ",arr[i]);
}
}
(3)代码3
#include <stdio.h>
void main(){
int arr[12] = {
2};
for(int i=0;i<12;++i){
printf("%d ",arr[i]);
}
}
(4)输出结果分析
1)代码1:输出全为不规则的数字
2)代码2:输出全为0
3)代码3:输出一个2,其他全为0
(5)结论
1)数组未初始化,数组里面的值都是随机值。
2)数组初始化为{
0},数组里面的值都是0。
3)数组初始化为{
非零值},数组里面第一个值是非零值,其他的值都是0。
1.2 部分初始化
#include <stdio.h>
void main(){
int arr[12] = {
[2]=2,[5]=5};
for(int i=0;i<12;++i){
printf("%d ",arr[i]);
}
}
指定下标的值被赋值,其他为0
1.3 大小
#include <stdio.h>
void main(){
char carr[12];
int iarr[12];
double farr[12];
printf("carr = %d\n",sizeof(carr));
printf("iarr = %d\n",sizeof(iarr));
printf("farr = %d\n",sizeof(farr));
}
输出结果为:
sizeof给出整个数组所占据的内容的大小。数组大小=元素大小*数组个数。
问题9:已知数组arr,如何求出数组元素个数?
sizeof(arr)/数组类型大小
char =1
int=4
float=8
1.4 赋值
int days[]={
31,28,31,30,31,30,31,31,30,31,30,31};
int arr = days;
这个时候的赋值是错误的,因为int只是在int一个类型,这个时候days代表的是数组days[]的首个元素或者首元素的地址
2、数组与指针
2.1 数组名是地址
数组名是数组第一个元素的地址
#include <stdio.h>
void main(){
int arr[] = {
1,2,3,4,5,6,7,8};
printf("&arr=%p\n",&arr);
printf("arr=%p\n",arr);
printf("&arr[0]=%p\n",&arr[0]);
}
输出为:
&arr=000000000061FE00
arr=000000000061FE00
&arr[0]=000000000061FE00
数组下标实现的操作指针也可以实现。数组名+下标表示下标i元素的地址
所以,遍历数组可以是:
#include <stdio.h>
void main(){
int arr[] = {
1,2,3,4,5,6,7,8};
for(int i=0;i<8;++i){
printf("%d\n",*(arr+i));
}
}
数组名是不可以改变的!
i
nt arr1[] = {
1,2,3,4,5,6,7,8};
int arr2