一.数组的概念
1.概念
①元素类型角度,数组是相同数据类型的变量的有序集合,测试指针变量占有内存空间大小。
②内存角度,联系的一大片内存空间。
2.数组的初始化
①数组元素的个数可以显示或者隐式地指定。
②分析数组初始化【0】与memset的比较。
- int main()
- {
- int i=0;
- int a[10]={1,2};//其他初始化为0
- int b[]={1,2};
- int c[20]={0};//编译的时候就已经确定了所有的值为0
-
- for(i=0;i<10;i++)
- {
- printf("%d ",a[i]);
- }
- memset(a,0,sizeof(a));//显示的时候 重置内存块
- getchar();
- return 0;
- }
3.数组名的技术盲点
①数组首元素的地址和数组地址是两个不同的概念。
②数组名代表数组首元素的地址,它是个常量。
解释如下:变量本质是内存空间的别名,一定义数组,就分配内存,内存就固定了,所以数组名起名以后就不能修改了。注意:类型的本质是固定大小内存块的别名。
③数组首元素的地址和数组的地址值相等。
④怎么样得到整个一维数组的地址?
C语言规定:
- int a[10];
- printf("得到整个数组的地址a:%d\n",&a);
- printf("数组的首元素的地址a:%d\n",a);
- 怎么样表达int a[10]这种数据类型?
二.数组类型,数组指针类型,数组指针类型变量
1.数组类型
①数据类型分为基础、非基础,思考角度应该发生变化。
②C语言中的数组有自己特定的类型
数组的类型由元素类型和数组大小共同决定。
例如:int array[5]的类型为int[5].
- typedef int(MYINT5)[5];//int
- typedef float(MYFLOAT10)[10];
- //数组定义:
- MYINT5 Array;//int Array[5];
- MYFLOAT10 fArray;//float fArray[10];
-
-
- //怎么样表达int a[10]这种数据类型?int[]
- //类型的本质,固定大小内存的别名
- //定义数据类型
- void main()
- {
- typedef int(MyArrayType)[5];//定义了一个数据类型,数组数据类型
- MyArrayType myArray;//int myArray[5]
-
- for (int i = 0; i < 5; i++)
- {
- myArray[i] = i + 1;
- }
-
- for (int i = 0; i < 5; i++)
- {
- printf("%d ", myArray[i]);
- }
-
- printf("\n myArray代表数组首元素地址:%d myArray+1:%d \n", myArray, myArray + 1);
- printf("\n &myArray代表整个数组地址:%d &myArray+1:%d \n", &myArray, &myArray + 1);
- system("pause");
- return ;
- }