gpt4 book ai didi

c - 从指针到指向原始数组的指针数组操作原始数组

转载 作者:行者123 更新时间:2023-11-30 16:42:37 24 4
gpt4 key购买 nike

我正在尝试操作数组prarr[3][3]通过使用指针ptr_ptr_prarr到数组 ptr_prarr[3][3]包含指向 prarr[3][3] 的指针。

我想以某种方式指出ptr_ptr_prarrptr_prarr并访问prarr[i][j]中的数据通过使用类似ptr_ptr_prarr[i][j]的东西。

void main()
{
int prarr[3][3];
int count = 1;

for (int i = 0; i <= 2; i++)
for (int j = 0; j <= 2; j++)
prarr[i][j] = count++;

//printArray(prarr);

int *ptr_prarr[3][3];
for (int i = 0; i <= 2; i++)
for (int j = 0; j <= 2; j++)
ptr_prarr[i][j] = &prarr[i][j];

int n = 1, x = n, y = n;
printf("\nArray Coords:(%d,%d)\nMemory location:%p\nValue:%d",
x, y, ptr_prarr[x][y], *ptr_prarr[x][y]);

int **ptr_ptr_prarr= *ptr_prarr;
printf("\n");
for (int i = 0; i <= 8; i+=3)/* <<--------------------------------- */
{
for (int j = 0; j <= 2; j= (j+1))
printf("%d", (ptr_ptr_prarr[i][j]));
printf("\n");
}

Sleep(20000);
}

我想我已经接近了,但由于某种原因 ptr_ptr_prarr需要包含“<<------------------------------------------------”的行:以不同的方式按顺序迭代复制原始数据。

不知何故,我访问了一些错误的内容,任何帮助将不胜感激!

最佳答案

我认为问题出在这一行......

int **ptr_ptr_prarr= *ptr_prarr;

这将创建一个指向 prarr[0][0] 地址的双指针。我认为你想做的是......

int **ptr_ptr_prarr= ptr_prarr;

这将创建一个指向 ptr_prarr 指针的指针,然后可以取消引用该指针以获取原始数组。

这样做的话,如果你想使用ptr_ptr_prarr修改prarr,你可以这样做

**ptr_ptr_prarr = 10

这将修改原始数组,以便 prarr[0][0] 现在包含值 10。

**(ptr_ptr_prarr + 1) = 10

这将修改原始数组,以便 prarr[0][1] 现在包含值 10。

总的来说,这是对指针的糟糕使用。这似乎不是特别有用,我也不认为它有助于更​​好地理解指针。如果您尝试在实际程序中使用这段代码(而不仅仅是作为示例),我建议您找到一种不同的方法来实现它。

关于c - 从指针到指向原始数组的指针数组操作原始数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45765127/

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