这是我的结构
//global
typedef struct {
char idCode[MATLENGTH + 10];
char *name;
} stud;
主要是,我这样做
Int main() {
stud *students;
createStudentArray(students);
....
我想做的是:
- 将数组(* student)传递给函数
- 制作函数alloc。数组
这是我写的功能
createStudentArray(stud *students) {
//I get this value from a file
int nstud = 3;
students calloc(nstud, sizeof(students));
return;
}
问题是:
- 当我尝试将任何值分配给学生字段时,它不起作用
离。
Int main() {
stud *students;
createStudentArray(students);
....
strcpy(students[0].name, "Nicola"); //this is where i get the error
我的猜测是,在某种程度上,我没有正确分配数组,因为,当我尝试做的时候
strcpy(students[0].name, "Nicola");
在createStudentArray函数中,它很好。所以看起来我按值传递数组,而不是通过引用。
提前感谢您的帮助。
答案 0 :(得分:2)
这是因为students
指针是按值传递的。 createStudentArray
内对stud *createStudentArray() {
//I get this value from a file
int nstud = 3;
stud *students = calloc(nstud, sizeof(students));
...
return students;
}
...
stud *students = createStudentArray();
的任何分配对调用者都是不可见的。
您有两种方法可以解决此问题:
这是第一个解决方案:
void createStudentArray(stud ** pstudents) {
//I get this value from a file
int nstud = 3;
*pstudents = calloc(nstud, sizeof(students));
...
}
...
stud *students;
createStudentArray(&students); // Don't forget &
这是第二个解决方案:
x
答案 1 :(得分:2)
在C中,参数由值传递,而不是通过引用传递。
对被调用函数中的参数所做的更改不会影响调用函数中的变量。
要从被调用者函数修改调用者的变量,请使用指针。
createStudentArray(stud **students) {
//I get this value from a file
int nstud = 3;
*students = calloc(nstud, sizeof(stud)); // this should be sizeof(stud), not students
return;
}
int main() {
stud *students;
createStudentArray(&students);
....
答案 2 :(得分:0)
这是因为在你的函数中,只有本地指针会被分配给你分配的内存块的新地址。 要从外部获取它,您需要使用指向指针的指针,如下所示:
createStudentArray(stud **students) { ... }
并将其称为:
createStudentArray(&students);
答案 3 :(得分:0)
你是对的,学生作为值传递给CreateStudentsArray(),你要么改变它以接受** stud,要么让它返回指向所创建数组的指针。
我的建议是使用指向指针的指针并使用*运算符取消引用它。
createStudentArray(stud **students) {
//I get this value from a file
int nstud = 3;
*students = calloc(nstud, sizeof(students));
return;
}
void main(){
stud = *students;
...
createStudentsArray(&students);
...
strcpy....