数组:
定义 :数组类型 数组类型 数组名[ 长度];
数组可以只赋值一部分其他的会默认为零,如:
int arr[10] = {1,2,3,4,5}相当于 int arr[10] = {1,2,3,4,5,0,0,0,0,0}
数组只定义,不初始化 其中的值全部为随机值 如: int arr[10] ;
数组定义时不给长度,让编译器通过赋的值推算长度应该是多少 如:
int arr[] = {1,2,3,4,5} 相当于 int arr[5] = {1,2,3,4,5}
数组访问
通过下标访问 如:arr[3] = 100;
注:当数组定义的时候,中括号中间的值代表长度且必须为常量,如:int arr[10] 里面中括号里面代表长度 arr [10] 里面中括号里面值代表下标,下标可以为常量也可以是变量
数组越界:访问到不属于自己的内存会发生数组越界,不安全
数组名可以表示数组首元素地址,
数组名只有两个情况下可以表示整个数组:
1.在定义数组的同一个函数内,sizeof(arr),这里arr代表整个数组
2.在同一个数组同一个函数内,&arr+1 ,这里的arr代表整个数组
求数组长度
公式:sizeof(arr) / sizeof(arr[0])
注意:必须在同一函数内使用
数组名作为参数传递的时候,会发生退化,退化成指针(只传递一个信息:数组开始地址,长度信息没有传递出去) 所以数组作为函数参数传递的时候,数组名和长度信息缺一不可
数组名只有在两种情况下,代表整个数组:
1.在定义数组的同一个函数内,sizeof(arr)
2.在定义数组的同一个函数内, &arr+1
实例应用:
如何颠倒数组的值,如: {1,2,3,4,5,6,7,8,9};颠倒为{9,8,7,6,5,4,3,2,1}.
void Show(int arr[], int length) //打印数组元素
{
for (int i = 0; i < length; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
//颠倒数组中的值 注意点:交换次数是总个数/2
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0, j = len - 1; i < j; i++, j--)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
Show(arr, len);
return 0;
}