1.数组的大小可以是常量表达式或常量,也可以是变量或变量表达式
2.在 C 语言中,变长数组不能被初始化。以下是一个示例代码:
int n;
scanf("%d",&n);
int arr(n)={0};
int n=10;
int arr(n)={0};
上述代码中,因为n
是变量,所以无法在定义数组时对数组内的元素初始化。想要初始化需要限定数组的范围,如将n
改为常量10。
在编译器不知道变量(数组大小)具体是多少的时候对数组初始化是没有意义的。所以,即使在支持 C99标准的编译器中,变长数组也不能初始化。
3.数组是使用下标访问的,下标是从0开始
4.数组的大小可以通过计算得知(设数组名为arr,)
int sz=sizeof(arr)/sizeof(arr[0]) 解释:sizeof(arr)是整个数组的内存大小;而后部分则为一个元素的内存大小
5.随着数组下标的递增,元素的地址,也是有规律的递增,因此数组在内存中是连续存放的
6.数组进行初始化时,有部分元素没有初始化,则元素默认为零
7.自己补充(利用函数打印数组里的元素)
void test(int arr[])//第一点 (形参改成int *arr也可以)
{
arr[0] = 1;//通过数组的下标来访问这个数值中的元素,并对其进行赋值
arr[1] = 2;
arr[2] = 3;
}
#include<stdio.h>
int main()
{
int arr[3];//建立一个函数名为arr,整型的,大小为12个字节的数组
test(arr);//当函数被调用时,实际上是将数组的首地址传递给了指针形参arr。
int i=0;
while (i <= 2)
{
printf("%d\n", arr[i]);
i++;
}
return 0;
}
第一点(解释):
总结:
(1)如果你的目的是接受一个整型数组作为函数参数,使用int arr[]或者int *arr通常是更为合适的选择,两种写法都是一样的效果。(当你使用int arr[]作为形参时,编译器会将其理解为int *arr)
(2)因为,目的是为了能在自定义的函数内操作数组内的元素,那就需要通过指针建立联系(而鉴于数组在内存的存储是连续的关系,所有需要将首地址传递到数组内就行,由(1)可得int arr[]或者int *arr都可以存储首地址),但如果你使用int *arr[]作为函数的形参,这通常会被视为一个指针数组,其中每个元素都是指向整型的指针,而不是表示单纯的整型数组,所以不能这样写