【发布时间】:2014-05-21 00:58:54
【问题描述】:
在函数中使用指针参数返回值时遇到问题。该函数正确加载了函数内的所有值,但不知何故未能将指针值传递给参数中的变量。
在我的例子中,我写了一个函数,它返回 1 或 0,具体取决于所讨论的内存分配是否失败,并且作为参数之一,它需要一个指向需要输入的列表的指针。列表的结构如下所示:
typedef struct sList {
int id;
char first_name[30];
char last_name[30];
struct sList *next;
} tList;
函数如下所示:
int readList(tList *start, int n){
tList *head = NULL;
tList *tail = NULL;
int i;
for (i = 0; i < n; i++){
tList *tmp = malloc(sizeof(tList));
if (tmp == NULL) return 0;
scanf("%d %s %s", &tmp->id, &tmp->first_name, &tmp->last_name);
tmp->next = NULL;
if (!head) head = tmp;
else tail->next = tmp;
tail = tmp;
}
start = head;
return 1;
}
以及主要方法:
void main(){
tList *start = NULL;
int n;
scanf("%d", &n);
readList(start, n);
tList *tmp = start;
while (tmp){
printf("%d %s %s\n", tmp->id, tmp->first_name, tmp->last_name);
tmp = tmp->next;
}
system("PAUSE");
return;
}
在调试过程中,我得出结论,函数内部的列表 head 和 start 具有所有输入的值,但是一旦我离开函数并返回start 列表的主程序很简单。所以,我的问题是,我做错了什么,因为据我所知,这在理论上应该可行。提前致谢。
【问题讨论】:
-
许多重复项,简短的回答是您需要将指针传递给您的指针,即
int readList(tList ** start, int n) { ...。 -
你的签名需要是一个指向指针的指针:
int readList(tList **start, int n) {...}。然后这样称呼它:readList(&start, n);.
标签: c function pointers structure