我试图通过使用指针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; ----------------------的行-----------“:以不同的方式迭代以复制原始数据。
不知怎的,我正在访问错误的内容,非常感谢任何帮助!
答案 0 :(得分:0)
由于数组在赋值运算符的右侧衰减为隐式指针,因此无需在数组上使用地址运算符。 所以
int **ptr_ptr_prarr= ptr_prarr;
答案 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.
总的来说,这是一个很糟糕的指针使用。这似乎不是特别有用,我认为它也不会更好地理解指针。如果你试图在实际程序中使用这段代码(而不仅仅是作为一个例子),我建议找到一种不同的方法来实现它。