C-更多的指针,阵列和弦
#c #指针 #数组 #字符串

等等我们还没有完成指针,如果您还没有看过上一篇博客文章,我强烈建议您检查一下。
因此,在这篇博客文章中,我们将深入研究更多的指针。


#C指针指针

指针指针是一种链式指针的一种形式,其中指针保存着另一个指针的地址。

指针的声明是通过在其名称前添加其他星号完成的。

带有n量的星号()的指针可以用n - 1星号()保存任何指针的地址。)。

TYPE **VAR_NAME;

在这种情况下,带有双星号()的指针可以用单个星号()保存指针的地址,并且它们具有相同的值。

示例

Image description
Output

Image description

概括此示例:
num == *ptr1 == **ptr2
&num == ptr1 == *ptr2
&ptr1 == ptr2

当变量声明时,此示例的内存布局为:
Image description

Image description

Image description

分配值10后,内存布局看起来像

Image description

Image description

Image description

将NUM的地址添加到Ptr1和Ptr1到Ptr2后,内存布局将看起来像这样:

Image description

Image description

Image description

您可以在上表中看到,我们使用数字来表示变量的地址,以更好地理解概念,地址最常见于示例的某种形式的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 }

这是无效的,因为未指定第二个值。

示例

Image description

Output
Image description

以下示例的内存布局为

Image description

Image description