我正在玩指针和结构。这是我一直在搞乱的程序。我收到了段错误,我不知道为什么。我已经查看了一段时间,但似乎无法确定问题。有人可以向我解释一下吗?
编辑:在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;
}
答案 0 :(得分:2)
您需要了解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]正如你所期望的那样。 / p>
答案 1 :(得分:0)
void createArray(char*** purp, int x, int y){
*purp[i][j] = '1';
我认为他们应该
void createArray(char** purp, int x, int y){
purp[i][j] = '1';
在主要
createArray(&dog.purp, dog.x, dog.y);
'&安培;'这里不需要,因为你已经传递了一个指针。 '&安培;'通常用于传递变量的地址。 纠正这些事情,它编译得很好,不确定你想做什么。