gpt4 book ai didi

c - C语言中的复杂指针语句

转载 作者:行者123 更新时间:2023-11-30 15:01:59 25 4
gpt4 key购买 nike

我得到了这段代码:

#include <stdio.h>

int main(void)
{
char *p[2][3] = {{"zyx","wvu","ts"},{"rqponm","lkjihgfe","dcba"}};

printf("%c \n",***p);
printf("%c \n",(*(*(p+1)+1))[6]);
printf("%c \n",**(p[1]+2));
printf("%c \n",*(*(p+1)+1)[6]);
printf("%c \n",**p[1]);
printf("%c \n",*(p[1][2]+2));
return 0;
}


我运行了该代码,但无法弄清楚为什么每一行都打印出它打印的内容。另外,我知道第四个 printf不会打印任何内容,并且会出错。应该是这样。

最佳答案

char *p[2][3] = {{"zyx","wvu","ts"},{"rqponm","lkjihgfe","dcba"}}


将打印 zfd,垃圾, rb

在底部,我们有字符“ z”,“ y”,“ x”,“ w”,……。
现在,根据定义 char *p[][],我们制作了一个二维的字符指针数组。即2D阵列将仅包含地址。

如何实现2D数组:这是包含其他1D数组地址的1D数组。因此,这里我们有 p[2][3],即将创建一个包含两个元素的1D数组,这两个元素中的每一个将包含另一个包含3个元素的1D数组的地址(基地址)。
并且由于我们将这个2D数组创建为字符指针数组,因此这3个元素将包含其他1D数组(未定义大小)的地址,这些数组保存着我们的字符值。
这是所有创建的数组的图像以及存储在这些数组中的值:
Image showing all the arrays with names

要打印:

1)。 ***p*(*(*p))


p包含两个元素的一维数组(P)的基地址。
* p将提取存储在该基本地址(即“ G的地址”)中的值。
*(*p)”将是存储在“ G的地址”指向的位置的值,该地址是数组G的基地址,即“ A的地址”
*(*(*p))将是存储在
“ A的地址”,即字符“ z”。
因此, ***p将返回“ z”。


2)。 (*(*(p+1)+1))[6]


由于p包含一维数组的基础地址,即
一维数组P的第一个元素。
p+1将是p的下一个地址,即第二个地址
一维数组P的元素。
*(p+1)将是存储在“ p+1”中的值,该值是“ H的地址”,其中包含H数组的基地址(地址为第一个元素的地址)
H)。
*(p+1)+1是下一个地址,它将是H的第二个元素的地址。
*(*(p+1)+1)将是存储在H的第二个元素上的值,该元素是E的地址(E数组的基地址)。
*(*(p+1)+1)[6]将是该数组中的第七个术语,即“ f”。


3)。 **(p[1]+2)


此处 p[1]指向由p指向的数组的第二个值,其中
是“ H的基址”(指向H中的第一个元素
数组)。
p[1]+2将是“ H的基址”的第二个下一个值(或
指向H数组中第一个元素的地址)
“ H数组中第三个元素的地址”。
*(p[1] + 2)将是“ H数组中第三个元素的地址”的值点,这将是“ H数组中第三个元素的值”
是“ F的基地址”。
**(p[1] + 2)是存储在“ F的基本地址”中的值,即“ d”。


4)。 *(*(p+1)+1)[6])


根据上面的情况2计算,“ *(p+1)+1”包含“地址”
H’的第二个元素现在,这里的 *(p+1)+1)[6]表示旁边的第7个值
它指向一些垃圾地址。还有‘(((p + 1)+1)[6])’
将是存储在该垃圾地址中的值,该值可以是
垃圾值。
观察这里的差异:它不是在询问H的第二个元素旁的值旁边的第七个值(如果是,答案将是
“ f”),但它询问的是第7个值
H的第二个元素的地址。


5)。 **p[1]


此处 p[1]将是由指向的数组第二个元素处的值
“ p”是“ H的基本地址”。
*p[1]是“ H的基地址”即“ D的基地址”所指向的值。
**p[1]是“ D的基地址”即“ r”所指向的值。


6)。 *(p[1][2]+2)


在这里 p[1][2]将是第二行(H数组)第三元素的值
是“ F的基地址”,进一步是“ d”的地址
字符)。
p[1][2]+2”将是“ d地址”的第二个下一个值
是“ b的地址”
*( p[1][2]+2)将是“ b的地址”上的值,即“ b”。

关于c - C语言中的复杂指针语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com