#include <stdio.h>
void printArray(int array[], int length)
{
for (int i = 0; i<length; i++)
{
printf("array[%d] = %d \n", i, array[i]);
}
}
void printArrayAddr(int array[])
{
printf("array的地址是%p \n", array);
}
int main()
{ /************************************************
*
* 使用数组注意事项:
*
* 正确写法
*
* 1、定义数组时进行初始化 int ages[5] = {10 , 11, 12, 67, 56};
* 2、定义数组时,只初始化部分数组元素,其他的默认为0
* int ages[5] = {10, 11};
* 3、定义数组时初始化指定下标的元素
* int ages[5] = {[3] = 10, [4] = 11};
* 4、如果知道数组的大小定义数组时可以省略数组的大小
* int ages[] = {10, 11, 14};
* 5、使用字符或者常量或者常量的运算结果作为数组的大小
* int ages['A'] = {10, 11, 12, 14, 16};
* int ages['A'- 50] = {10, 11, 12, 14, 16};
* int ages[60 - 50] = {10, 11, 12, 14, 16};
* 6、数组的大小使用一个变量指定,但是此时不能对数组进行初始化
* int count = 5;
* int ages[count];
* ages[0] = 10;
* ages[1] = 11;
* ages[2] = 18;
*
* 错误写法:
*
* 1、没有标明数组的大小 int ages[];
* 2、在声明数组后对数组进行初始化
* int ages[5];
* ages = {10, 11, 12, 14};
* 3、数组的大小使用一个变量指定,并且对数组进行初始化
* int count = 5;
* int ages[count] = {10, 11, 12};
* 4、使用类似其他语言声明数组的方法:
* int[5] ages;
*
* 计算数组的长度:
* int count = sizeof(ages)/sizeof(int);
* 当一个函数的参数是数组时,如果我们传递一个数组名调用函数此时传递的是数组的地址,
* 当我们在函数中对数组中相应位置的数据进行修改,此时修改的是数组中的数据
*
* 二维数组:二位数组可以看做是数组的数组,比如a[2][2]是由a[0]和a[1]组成,
* 其中a[0]包含a[0][0],a[0][1],a[1]包含a[1][0],a[1][1].
*
***************************************************/
//1、定义数组时进行初始化 int ages[5] = {10 , 11, 12, 67, 56};
printf("1、定义数组时进行初始化 int ages[5] = {10 , 11, 12, 67, 56};\n");
int ages[5] = {10 , 11, 12, 67, 56};
printArray(ages,sizeof(ages)/sizeof(int));
printf("\n");
//2、定义数组时,只初始化部分数组元素,其他的默认为0
printf("2、定义数组时,只初始化部分数组元素ages2[5] = {10 , 11};,其他的默认为0\n");
int ages2[5] = {10 , 11};
printArray(ages2,sizeof(ages2)/sizeof(int));
printf("\n");
// 3、定义数组时初始化指定下标的元素 int ages[5] = {[3] = 10, [4] = 11};
printf("3、定义数组时初始化指定下标的元素 int ages[5] = {[3] = 10, [4] = 11};\n");
int ages3[5] = {[3] = 10, [4] = 11};
printArray(ages3,sizeof(ages3)/sizeof(int));
printf("\n");
//4、如果知道数组的大小定义数组时可以省略数组的大小 int ages[] = {10, 11, 14};
int ages4[] = {10, 11, 14};
printf("4、如果知道数组的大小定义数组时可以省略数组的大小 int ages[] = {10, 11, 14};\n");
printArray(ages4,sizeof(ages4)/sizeof(int));
printf("\n");
// 5、使用字符或者常量或者常量的运算结果作为数组的大小 int ages['A'] = {10, 11, 12, 14, 16};
printf("使用字符或者常量或者常量的运算结果作为数组的大小 int ages['A' - 60] = {10, 11, 12, 14, 16};\n");
int ages5['A' - 60] = {10, 11, 12, 14, 16};
printArray(ages5,sizeof(ages5)/sizeof(int));
printf("\n");
//6、数组的大小使用一个变量指定,但是此时不能对数组进行初始化,如果有的数组元素没有初始化会出现不可预知的值
printf("6、数组的大小使用一个变量指定,但是此时不能对数组进行初始化\n");
int count = 5;
int ages6[count];
ages6[0] = 10;
ages6[1] = 11;
ages6[2] = 18;
printArray(ages6,sizeof(ages6)/sizeof(int));
printf("\n");
printf("数组地址\n");
int addr[3] = {1,2,3};
//数组名代表数组的地址
printf("数组addr地址是:%p\n",addr);
printf("调用函数:\n");
printArrayAddr(addr);
for (int i=0; i<3; i++)
{
printf("数组addr[%d]的地址是:%p\n", i, &addr[i]);
}
printf("\n");
int barray[2][2] = {{1,2},{3,4}};
printf("barray的地址是:%p\n",barray);
printf("barray[%d]的地址是:%p\n", 0, barray[0]);
printf("barray[0][0]的地址是:%p\n", &barray[0][0]);
printf("barray[0][1]的地址是:%p\n",&barray[0][1]);
printf("barray[1]的地址是:%p\n",barray[1]);
printf("barray[1][0]的地址是:%p\n",&barray[1][0]);
return 0;
}
1、定义数组时进行初始化 int ages[5] = {10 , 11, 12, 67, 56};
array[0] = 10
array[1] = 11
array[2] = 12
array[3] = 67
array[4] = 56
2、定义数组时,只初始化部分数组元素ages2[5] = {10 , 11};,其他的默认为0
array[0] = 10
array[1] = 11
array[2] = 0
array[3] = 0
array[4] = 0
3、定义数组时初始化指定下标的元素 int ages[5] = {[3] = 10, [4] = 11};
array[0] = 0
array[1] = 0
array[2] = 0
array[3] = 10
array[4] = 11
4、如果知道数组的大小定义数组时可以省略数组的大小 int ages[] = {10, 11, 14};
array[0] = 10
array[1] = 11
array[2] = 14
使用字符或者常量或者常量的运算结果作为数组的大小 int ages['A' - 60] = {10, 11, 12, 14, 16};
array[0] = 10
array[1] = 11
array[2] = 12
array[3] = 14
array[4] = 16
6、数组的大小使用一个变量指定,但是此时不能对数组进行初始化
array[0] = 10
array[1] = 11
array[2] = 18
array[3] = 5
array[4] = 4200756
数组地址
数组addr地址是:0022fe58
调用函数:
array的地址是0022fe58
数组addr[0]的地址是:0022fe58
数组addr[1]的地址是:0022fe5c
数组addr[2]的地址是:0022fe60
barray的地址是:0022fe48
barray[0]的地址是:0022fe48
barray[0][0]的地址是:0022fe48
barray[0][1]的地址是:0022fe4c
barray[1]的地址是:0022fe50
barray[1][0]的地址是:0022fe50