C语言中的数组是一种将标量聚集成更大数据类型的方式。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void PrintArray(int arr[], int n)
{
printf("array:\n");
for (int i = 0; i < n; i++) {
// printf("%d\t", arr[i]);
printf("%d\t", *(arr + i));
}
printf("\n");
}
// 数组做参数时,传递的是数组首地址的值
// 形参在内部退化成局部变量的指针
void PrintArgInfo(int arr[], int n)
{
printf("function argument:\n");
printf("arr: 0x%x\n", arr); // int *
printf("sizeof(arr): %d\n", sizeof(arr)); // 4
}
int main()
{
// 一维数组
// *(arr + x) = arr[x];
int arr[3] = { 1, 2, 3 };
PrintArray(arr, 3);
printf("arr: 0x%x\n", arr); // int *
printf("sizeof(arr): %d\n", sizeof(arr)); // 12
printf("arr[1]: %d\n", *(arr + 1)); // arr[1] = 2
PrintArgInfo(arr, 3);
getchar();
return 0;
}#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 二维数组作形参时,需要指定数组二维的大小
// 1)int arr[][m]; 2)int (*arr)[m]
// void Print2Array(int arr[][4], int n)
void PrintArray(int(*arr)[4], int n)
{
printf("array:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < 4; j++) {
printf("%d\t", arr[i][j]);
}
printf("\n");
}
}
int main()
{
// 二维数组,即数组的数组
// *(*(arr + x) + y) = arr[x][y];
int arr[3][4] = {
1, 2, 3, 4,
5, 6, 7, 8,
1, 2, 3, 4
};
typedef int col4[4];
col4 A[3];
PrintArray(arr, 3);
printf("&arr: 0x%x\n", &arr); // int (*)[3][4]
printf("sizeof(&arr): %d\n", sizeof(&arr)); // 4
// 数组做参数时,传递的是数组首地址的值
printf("arr: 0x%x\n", arr); // int (*)[4]
printf("sizeof(arr): %d\n", sizeof(arr)); // 48
printf("arr[0]: 0x%x\n", arr[0]); // int *
printf("sizeof(arr[0]): %d\n", sizeof(arr[0])); // 16
printf("arr[1][2]: %d\n", *(*(arr + 1) + 2)); // arr[1][2] = 7
getchar();
return 0;
}总结
1) 数组名本质上是指向该数组首地址的常量指针。
2) 数组做实参时,传递的是数组首地址的值;数组作形参时,在内部退化成局部变量的指针。
3) 多维数组,即数组的嵌套,可以看成是数组的数组。
4) 二维数组作形参时,需要指定数组二维的大小。
5) 可以使用指针对数组元素进行操纵,arr[i] = *(arr + i)等价。
1530

被折叠的 条评论
为什么被折叠?



