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

时间:2017-08-18 21:13:23

标签: c arrays pointers syntax

我试图通过使用指针total=0 for x in xrange(1000): if x % 3 == 0 or x % 5 == 0: total += x 来操纵数组prarr[3][3]到包含指向ptr_ptr_prarr的指针的数组ptr_prarr[3][3]

我想以某种方式将prarr[3][3]指向ptr_ptr_prarr并使用ptr_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); } 需要包含“&lt;&lt;&lt; ----------------------的行-----------“:以不同的方式迭代以复制原始数据。

不知怎的,我正在访问错误的内容,非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

由于数组在赋值运算符的右侧衰减为隐式指针,因此无需在数组上使用地址运算符。 所以

int **ptr_ptr_prarr= ptr_prarr;

Pointer to Array of Pointers

答案 1 :(得分:0)

我认为问题在于这条线......

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.

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