[英]Point an array of pointers to an array of arrays
我試圖指向一個數組數組(學習目的)。 我為此目的使用這一行:
int Arr[6][6];
int (*ptr)[6][6];
ptr = &Arr;
這個對嗎? (編輯:我打算使用指向6x6數組的指針。另外,考慮到我希望接受輸入並將其打印出來,哪種聲明更好?指針數組或指向6x6數組的指針?)
下一個,
(“使用指針讀取和打印2d數組”代碼是完全混亂,這就是為什么我不會在這里顯示它。)
我想使用scanf和printf通過ptr(它應該將它分配給Arr)輸入,然后打印Arr和ptr以查看語法(如果它可以工作)。 顯然兩個印刷陣列應該是相同的。
我應該使用什么語法? 這非常令人困惑,我希望這能幫助我更好地學習。
for (i = 0; i < 6; i++)
{
printf_s("\nEnter values for row %d (Enter 0 for 1-1, 2-2 etc.:\n", i + 1);
for (j = 0; j < 6; j++)
{
printf_s("Row %d Column %d", i + 1, j + 1);
scanf_s("%d", &(*ptr)[i][j]); ........(ptr)[i][j] doesn't allocate to Arr correctly
}
}
for (i = 0; i < 6; i++)
{
printf_s("\n");
for (j = 0; j < 6; j++)
{
printf_s("%d\t", (*ptr)[i][j]); .........*(ptr)[i][j] is wrong because it dereferences the whole 2D array.
}
}
致謝:haccks(我多次改變了這個問題,所以我指出了我在同一時間犯過的錯誤)
int (*ptr)[6][6];
將ptr
聲明為指向6
元素的數組的指針,每個元素都是6
整數的數組(類型為int (*)[6][6]
)。 Now &Arr
也是int (*)[6][6]
類型,你的任務是合法的。
在您的scanf_s
參數中,您缺少&
。 這應該是
scanf_s("%d", &(*ptr)[i][j]);
注意(*ptr)[i][j]
是int
類型。 就像Arr[i][j]
。 要將值存儲到Arr[i][j]
您需要&
,類似地&
用於存儲值(*ptr)[i][j]
。
查看更正的程序:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int Arr[6][6];
int (*ptr)[6][6];
ptr = &Arr;
for (int i = 0; i < 6; i++)
{
printf("\nEnter values for row %d (Enter 0 for 1-1, 2-2 etc.:\n", i + 1);
for (int j = 0; j < 6; j++)
{
printf("Row %d Column %d: ", i + 1, j + 1);
scanf("%d", &(*ptr)[i][j]);
}
}
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
printf("%d\t", (*ptr)[i][j]);
printf("\n");
}
}
輸出: http : //ideone.com/q6BQ61
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.