C语言中数组是元素类型相同的变量的集合,从内存角度来看是一大段连续的内存空间。
在使用数组之前,一个好的习惯是通过memset函数对数组的内容进行初始化。相当于是重置内存块,这种方式和将数组初始化赋值为0是不一样的,第一种是显示的进行,第二种是通过编译器来进行的操作,在编译阶段才将数组中的元素全部置为0,相比较是第二种要快一点了。
数组首元素地址和数组元素地址是不同的。数组名表示数组元素首地址,数组名取地址表示的是整个数组的首地址,在同时进行+1操作的时候带来的效果是不同的。
这些是C语言规定的内容。
数组名代表数组首地址,是一个常量,最根本的目的是为了在释放内存空间的时候可以找到这个内存地址。
数组首元素地址和整个数组地址是相同的。
如何表达数组这个数据类型。
数组是非基础的数据类型,思考应该发生变化。
数据的类型是由元素的类型+数组的大小所决定的。
在C语言中如何定义一个数组类型呢?
在C语言中使用typedef int(myint) [5];这样就定义了一个类型,名称为myint,大小为5个int的大小的内存块。这样就抽象了一个数据类型,这个数据类型是数组数据类型。
这里仅仅相当于是一个变量名称,接下来还需要进行内存的初始化。具体的操作方式和数组的操作方式是相同的。包括赋值操作和打印出来的操作都是和当成整个数组是一样的。
数组类型指针,就是定义一个指针,指向这个数组。
指针数组,就是一个数组,里面放置的数据是指针。
数组指针,就是一个指针,来指向一个数组。
就是定义对应类型的指针变量指向对应的数据类型。
不管怎样,指针都是4个字节的变量在32位的机器上面。
定义数组指针的第二种方法就是,定义一个对应的数组指针类型,用这个指针类型来定义变量。
第三种:
直接定义一个指向数组的指针变量。
多维数组做函数参数,为什么会存在退化?
数组类型,数组指针类型,数组指针类型变量。函数数据类型,怎么定义函数变量,定义函数类型的指针。
为什么要讲数组类型,数组指针类型,通过这两种类型定义数组指针类型的变量?
指针和多维数组名在本质上的联系:
多维数组名代表什么意思?
多维数组名相当于是一个数组指针,对于一个int arr[3][5] 类型的多维数组,arr+1会跳过20个字节,相当于是有一个指针变量来一下子跳过了20个字节
多维数组名和一个指向同大小的数组类型的变量是一致的。
多维数组名的本质是,一个数组指针,每次往后跳就跳1维数组的长度。可以从步长的角度来进行理解,步长就是1维的长度。
多维数组名本身也是多级指针,一定要明确是几级指针。
多维数组名的本质,是一个指向一维数组的指针。
多维数组做函数参数的退化问题。
一维数组做函数参数会退化为一个一维指针。
在多维数组中同样存在一个退化问题。
C语言中只会以机械式的值方式传递参数。C语言是高效的。
指针数组的应用场景。