我是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