1、数组
数组使用之前必须声明:
类型定义符 数组名[常量表达式]
在声明数组时必须说明数组长度。
较好的方法是用宏来定义数组的长度。
#include <stdio.h>
#define N 10
int main()
{
int arr[N];
for(int i=0;i<10;i++){
arr[i]=i+1;
printf("%d ",arr[i]);
}
}
通常采用for循环对数组的每个元素执行操作。下标是0到N-1.
C语言不要求编译器检查数组下标是否超出范围,当下标超出范围时,程序可能执行不可预知的操作。
#include <stdio.h>
#define N 10
int main()
{
int arr[N];
for(int i=0;i<=10;i++){
arr[i]=i+1;
printf("%d ",arr[i]);
}
}
总共10个元素,下标却是0-10,下标越界,但编译器没有报错,最后一个数字输出异常。
数组初始化:如果初始化式比数组长度短,那么数组中剩余的元素被赋值为0.
#include <stdio.h>
#define N 10
int main()
{
int arr[N]={1,2,3,4,5,6};
//为下标为0-5的元素赋值
for(int i=0;i<6;i++){
arr[i]=i+1;
}
//输出所有元素
for(int i=0;i<10;i++){
printf("%d ",arr[i]);
}
}
如果所有元素都是0,可以这样写:
int a[10]={0};
不少编译器认为“初始化式完全为空是非法的,因此最好在花括号内放上一个单独的0.
C99中的指定初始化可以解决数组中只有相对较少的元素需要进行显示的初始化,而其它元素默认为0的问题。
#include <stdio.h>
#define N 10
int main()
{
int arr[16]={0,0,0,2,0,0,6,0,0,0,7,0,0,0,0,0};
//输出所有元素
for(int i=0;i<16;i++){
printf("%d ",arr[i]);
}
printf("\n");
//相同的元素,换种方式初始化数组
int a[16] ={[3]=2,[6]=6,[10]=7};
for(int i=0;i<16;i++){
printf("%d ",a[i]);
}
}
对数组使用sizeof运算符
sizeof可以获取数据类型或者变量占用字节数。
用sizeof(arr)/arr[0]可以得到数组长度,即元素个数。
for(int i=0;i<(int)sizeof(arr)/sizeof(arr[0]);i++){
printf("%d ",arr[i]);
}
sizeof函数返回size_t类型,为了避免警告,可以强制转换为int类型。