初学者C语言函数问题

来源:百度知道 编辑:UC知道 时间:2024/05/07 02:04:46
RT
目前遇到一个问题感觉很疑惑,于是来问问……

void insert (char *family, char *first, char *address, char *phonenumber, phoneptr head)
{head=newentry (family, first, address, phonenumber,head);}
-------------------这个是一个会在运行时CALL一个叫NEWENTRY的函数的函数---
然后在MAIN FUNCTION中,如果我写

head=newentry (family, first, address, phonenumber,head)

那么HEAD指针会成功指向新生成的结构
但是如果我写

insert (family, first, address, phonenumber,head)

的话,HEAD指针就不会指向任何东西
但是问题就在于这个INSERT 函数里面干的事情和NEWENTRY里的一模一样
如果我要用一个VOID的函数来CALLNEWENTRY的话,又应该怎么做呢?

非常不解这个问题……希望高手解答,谢谢

注意一下这个函数void insert (char *family, char *first, char *address, char *phonenumber, phoneptr head)
{head=newentry (family, first, address, phonenumber,head);}
,你的head是一个什么我不太清楚,但是由于函数是值传递的,你的head仅仅是传递了一个值的拷贝而已 ,而里面函数的操作也是对于这个拷贝进行的,而这个函数没有返回值,当你直接调用的时候当然head不会指向任何东西了,但是你要是调用head=newentry (family, first, address, phonenumber,head);之后,那么因为这个函数有一个返回值,虽然和那个的作用是一样的,但是这个函数把返回值直接赋值给了你定义的那个变量,而不是拷贝的变量,所以head就会有指向了,要是要用一个void的函数来实现的,我觉得应该这样子:

void insert (char *family, char *first, char *address, char *phonenumber, phoneptr *head)
{* head=newentry (family, first, address, phonenumber,head);}
要是类型不匹配那你再转换一下,反正就是要吧head的地址传进去,然后再对它的值,一定要是值,因为你传入的也是一个地址的拷贝,如果仅仅对地址操作是没有作用的,只能对地址指向的值的操作才能改变的

#include "stdio.h"

void main()
{
int n;
enum season{spring=1,summer,autumn,winter}s;
printf("Please enter one number(1-4):\n");
scanf("%d",&n);
s=(enum season)n;
switch(s)
{