【发布时间】:2020-08-02 09:06:58
【问题描述】:
我有一个问题。我想将我自己的二维数组传递给pass 函数。在那个函数中,我将更改我自己的数组。所以,有一个return。我确切知道的是编译器可以接受代码攻击。但是,我不知道为什么。当我将int (* aaa)[3]; 从main 函数中取出时,它运行良好。但是,当它在main 内时,会抛出unable to use the uninitialized aaa 的异常。我想知道为什么会发生这种情况。
int* pass(int (*a)[3]) {
a=(int*)malloc(sizeof(int*)*2);
a[0][1] = 1;
a[0][2] = 2;
return a;
}
int (* aaa)[3];
int main() {
aaa = pass(aaa);
printf("%d", aaa[0][2]);
}
这可以工作。
int* pass(int (*a)[3]) {
a=(int*)malloc(sizeof(int*)*2);
a[0][1] = 1;
a[0][2] = 2;
return a;
}
int main() {
int (* aaa)[3];
aaa = pass(aaa);
printf("%d", aaa[0][2]);
}
但是,这行不通。
【问题讨论】:
-
去掉变量名周围的
(,)和指针指示器*。虽然(datatype*) variablename很好.. 但仍然有点括号过分。 -
@OlSen 他们不是不必要的。它们改变了声明的含义。
-
确实.. 不就是一个匿名函数声明吗?
-
@OlSen 不。 OP 正在声明一个指向三个整数数组的指针。如果没有括号,它将是一个包含三个指向 int 的指针的数组。
-
当然不行。
a=(int*)malloc(sizeof(int*)*2);为两个指针分配存储空间。a[0][1] = 1;毫无意义。int (* aaa)[3];是一个指向数组的指针int[3],您在任何地方都找不到int[3]数组。