多维数组

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语言是高效的。

指针数组的应用场景。

原文地址:https://www.cnblogs.com/andyniu/p/7625569.html