我是CS學生,主要從事家庭作業,我需要關於C語法問題的幫助。昨天在課堂上,我的教授說:「一個int **指針是指向一個2D int數組的指針。」這讓我大跌眼鏡。原來,我們必須編寫一個C程序,它從文件中讀取一個int矩陣,然後對該矩陣進行操作。例如,「matrix1.txt」可能如下所示:訪問2D數組中元素的精確語法 - 通過指針?
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
...對於5x3矩陣。我從另一個文件中獲得矩陣的維數,這是我已經解決的一個問題。但關鍵是我必須使用變量動態分配矩陣數組。
這是我的問題:它很容易使用一個int **指針指向malloc()一個Y-by-X數組......但是訪問它的語法是什麼?這是我的代碼:
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
char *myFile = argv[1];
FILE *targetFile;
targetFile = fopen(myFile, "r");
if (targetFile == NULL)
return -1;
else {
// Successfully opened "matrix1.txt" file
int x, y; // dimensions of the array, learned elsewhere...
int i, j;
char* data = NULL;
int** matrix = (int**)malloc((x*y)*sizeof(int)); // allocate memory for an Y-by-X array
for(i=0; i<y; i++){
for(j=0; j<x; j++){
fscanf(targetFile, "%c ", &data);
matrix[i][j] = atoi(data); // program seg faults here
}
}
}
fclose(targetFile);
return 1;
}
問題是「matrix [i] [j] = atoi(data);」線;我要麼使用錯誤的語法,要麼我沒有初始化數組。我無法分辨出 - 只要我在GDB調試器中點擊這行,程序段就會立即出錯。
我敢肯定,這是一個C 101類型的問題......但我發佈這個,因爲我一直在閱讀很多不同的2D數組和指針的帖子,但我似乎無法找到一個例子這符合我的確切情況。任何人都可以幫我解決這個問題嗎?
Thanks,
-ROA
BTW,'的fscanf(的TargetFile,「%C」,&data);'您解決內存分配問題後會導致問題。只需使用一個'int'變量,'%D'格式從文件中讀取。int data; ... fscanf(targetFile,「%d」,&data);'。 –
你的教授是另一個混淆指針和數組的人,我不知道他教導的其他錯誤概念是什麼。在你的問題中沒有二維數組,也沒有可以表示指向一個點的東西,指針不是一個數組 – Olaf
@RSahu:這個答案不顯示二維數組,也不是提出的dup顯示一個!混淆了二維數組是什麼,並指出如何使用它的指針 – Olaf