Posted on 2009-01-07 09:14
天之驕子 閱讀(2364)
評論(0) 編輯 收藏 引用
一、結構體與函數參數
結構體作函數參數可分為傳值與傳指針。
1.傳值時結構體參數會被拷貝一份,在函數體內修改結構體參數成員的值實際上是修改調用參數的一個臨時拷貝的成員的值,這不會影響到調用參數。在這種情況下,由于涉及到結構體參數的拷貝,程序空間及時間效率都會受到影響,所以這種方法基本不用。
例如:
typedef struct tagSTUDENT{
char name[20];
int age;
}STUDENT;
void fun(STUDENT stu)
{
printf(“stu.name=%s,stu.age=%d\n”,stu.name,stu.age);
}
2.傳指針時直接將結構體的首地址傳遞給函數體,在函數體中通過指針引用結構體成員,可以對結構體參數成員的值造成實際影響。這種用法效率高,經常采用。
例如:
typedef struct tagSTUDENT{
char name[20];
int age;
}STUDENT;
void fun(STUDENT* pStu)
{
printf(“pStu->name=%s,pStu->age=%d\n”,pStu->name,pStu->age);
}
二、結構體與函數返回值
對于某些版本的C語言編譯器,返回值僅能為基本數據類型如int、char以及指針,因此結構體作為一種組合數據類型,不能以值的方式返回,而在有些版本的C編譯器中又可以直接返回結構體變量 ,在C++中也是可以直接返回結構體變量的。
直接返回結構體變量示例如下;
typedef struct tagSTUDENT{
char name[20];
int age;
}STUDENT;
STUDENT fun();
int _tmain(int argc, _TCHAR* argv[])
{
STUDENT p=fun();
printf("p.name=%s",p.name);
return 0;
}
STUDENT fun()
{
STUDENT stu;
stu.age=18;
strcpy(stu.name,"xiaoming");
return stu;
}
以指針方式返回結構體示例如下:
typedef struct tagSTUDENT{
char name[20];
int age;
}STUDENT;
STUDENT* fun()
{
STUDENT* p=malloc(sizeof(STUDENT));
p->age=18;
strcpy(p->name,"xiaoming");
return p;
}