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

标签 c arrays pointers syntax

我正在尝试操作数组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/

相关文章:

c - 排序算法交换不起作用

c - bmake : Proper use of Automatic Variables

java - 数组索引问题

c - 在 C 工作线程中实现计时器的方法

php - 将php数组元素插入mysql数据库

c++ - 将字符串拆分为不同的数组

c - 丢弃来自 libcurl 的响应数据

c - c中指向指针赋值的指针

c - 如何将整数存储在 char* 指向的位置

c - 是否有调用开发路径的子文件夹的多功能?