0
Word Count: 671(words)
Read Count: 3(minutes)
本文只记录注意点
1.数组的定义过程
1.定义数组
数组大小必须确定
手动指定大小
- [类型] 名字 [大小];
- [类型] 名字 [大小]={1,,1}
编译器指定
- [类型] Name []={1,12,12}
一种特别的定义方式
- [Type] Name {} ={[指定下标]=1,[指定下标]} int array3[]={[1]=1,[4]=3}; 数组的长度默认是 最大下标+1
作为函数参数的时候可以 int array[] 。其他情况不行。
2.更改名字
数组在声明时,编译器自动为 数组分配了内存地址,这个地址与数组名是绑定的,不可更改。。
1 2 3 4 5 6 7 8 9
| int a[]={12,12,123} int b[2]=a; [Error] incompatible types when assigning to type 'int[2]' from type 'int *'
int a[]={12,12,123} int b[2]; b=a; 都会报错
|
How?
使用指针
1 2 3
| int a[]={12,12,1}; int *b; b=a;
|
但这里会存在一个问题,数组变量变成指针变量后,大小会发生改变。当数组被当成参数传递后,默认传递的是一个 ==指针变量==则使用 sizeof 得到的结果会发生变化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| int array1[]={1,1,4,5,5,12}; printf("转换指针前的大小 %zd \n",sizeof(array1)); int *ppp=array1; printf("转换指针后的大小 %zd \n",sizeof(ppp)); ================================================= 转换指针前的大小 24 转换指针后的大小 8
void testAaary(int *array1, int array2[]){ printf("传递后array1大小为 %zu \n",sizeof(array1)); printf("传递后array2大小为 %zu \n",sizeof(array2)); }
int main(){ int array1[]={1,1,4,5,5,12}; int array2[]={2,4,5,6,2,26}; printf("array1传递前数组的大小为 %zd \n",sizeof(array1)); printf("array2传递前数组的大小为 %zd \n",sizeof(array2)); testAaary(array1,array2); return 0; } =========================================== array1传递前数组的大小为 24 array2传递前数组的大小为 24 传递后array1大小为 8 传递后array2大小为 8
|
2.参数传递
一维度数组传递作为参数
1
| void arrayTest(int array1[],int len){}
|
二维或多维度 —-> ==除了第一维度可以使用参数传递,其他的都需要在定义的时候就写好!
1
| void arrayTest(int array1[][3],int len)
|
- 直接使用 字面量 进行传参
1 2 3
| int sum_array(int *a,int len);
int a=sum_array( (int []){1,2,3},5)
|
3.多维数组
并没有什么区别,只是 如果使用 一个 array[0] 访问则是 一整个数组的地址。
1 2 3 4 5 6 7
| printf("==========多维数组===================\n"); int array5[][2]={{123,123},{124,124}};
printf("%d\n",array5[0][0]); printf("%d\n",**array5 ); printf("%d\n",*(array5[0]) );
|