我正在研究指针和结构。这是我一直在搞乱的程序。我收到段错误,但我不知道为什么。我已经浏览了一段时间,但似乎无法查明问题所在。有人可以向我解释一下吗?
编辑:在 createArray 中,我在 *purp[i][j] = '1'; 处遇到段错误;
#include <stdio.h>
#include <stdlib.h>
struct purple_struct{
int x;
int y;
char **purp;
};
void print(int x, int y){
printf("%d %d\n", x, y);
return;
}
void createArray(char*** purp, int x, int y){
int i, j;
for (i = 0; i < x; ++i){
for (j = 0; j < y; ++j){
*purp[i][j] = '1';
}
}
return;
}
int main(){
int i, j;
struct purple_struct dog;
dog.x = 3;
dog.y = 4;
dog.purp = (char **)malloc(dog.x * sizeof(char *));
for (i = 0; i < dog.x; ++i){
dog.purp[i] = (char *)malloc(dog.y * sizeof(char));
}
createArray(&dog.purp, dog.x, dog.y);
for (i = 0; i < dog.x; ++i){
for (j = 0; j < dog.y; ++j){
printf("%c", dog.purp[i][j]);
}
}
print(dog.x, dog.y);
return 0;
}
最佳答案
您需要了解operator precedence的概念。就像在数学中一样,1 + 2 × 3 等表达式表示 1 + (2 × 3) 而不是 (1 + 2) × 3,编程语言对表达式中不同运算符的执行顺序有规则。
C 的规则在这里:http://en.cppreference.com/w/c/language/operator_precedence
就您而言,问题是 *purp[i][j] 实际上意味着 *(purp[i][j]),而不是您所期望的 (*purp)[i][j]。
关于c - 段错误 : struct, 指针,二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37710471/