等等我们还没有完成指针,如果您还没有看过上一篇博客文章,我强烈建议您检查一下。
因此,在这篇博客文章中,我们将深入研究更多的指针。
#C指针指针
指针指针是一种链式指针的一种形式,其中指针保存着另一个指针的地址。
指针的声明是通过在其名称前添加其他星号完成的。
带有n
量的星号()的指针可以用n - 1
星号()保存任何指针的地址。)。
TYPE **VAR_NAME;
在这种情况下,带有双星号()的指针可以用单个星号()保存指针的地址,并且它们具有相同的值。
示例
概括此示例:
num == *ptr1 == **ptr2
&num == ptr1 == *ptr2
&ptr1 == ptr2
分配值10后,内存布局看起来像
将NUM的地址添加到Ptr1和Ptr1到Ptr2后,内存布局将看起来像这样:
您可以在上表中看到,我们使用数字来表示变量的地址,以更好地理解概念,地址最常见于示例的某种形式的hexadecimal中。
在表中num = 10和地址= 13的值,ptr1将num的地址保留为13的值,Ptr1的地址为17。
现在,我们来到表中的指针ptr2中的指针将另一个指针的地址保存为一个值,这就是Ptr2(双指针)的情况,它在其中包含其他指针的地址。
#two维数(2D)阵列
二维数组也被称为数组。
声明二维数组
TYPE ARRAY_NAME[x][Y]
哪些类型可以是任何有效的C数据类型,ArrayName将是有效的C标识符,X行和Y列数。
要初始化二维阵列,我们使用两种方法
int a[3][4] = {{0, 1, 2, 3},{6, 3, 61, 7},{10, 75, 1, 16}};
int a[3][4] = {0,1,2,3,6,3,61,7,10,75,1,16};
使用2D数组,即使您在声明期间指定元素,也必须始终指定第二维。
int a[][] = {1, 2, 3 ,4 }
这是无效的,因为未指定第二个值。
示例
以下示例的内存布局为