十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1.可以把结构体作为参数啊,
10年积累的成都网站制作、网站设计、外贸网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有翼城免费网站建设让你可以放心的选择与我们合作。
2.不去取地址的意思,是引用的意思,函数执行时修改L的值,就直接的修改了实参的值,相当于地址传递了。
3.真正调用的时,如下:
SqList
tempStruct;
InitList_Sq(tempStruct)
这样就可以了。
呵呵
1、结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。
2、例程:
typedef struct Student
{
char name[10] ;
int age ;
}Student;
#define LEN 10
//print all Student infomation
void fun(Student *pStu,int len)
{
int i ;
for(i = 0 ;i len ;++i)
{
printf("%s\t%d",pStu[i].name,pStu[i].age) ;
}
}
int main ()
{
Student stu[LEN] ;
fun(stu,LEN) ;
}
(1)
里传的是main里y的值,传过去的x在函数b里只是个局部对象,影响不到main里的实参y
(2)
的实质是传递了y数组的首地址,也就是y数组中唯一一个元素的地址,b函数里接受到x其实是main里y[0]的地址,所以x[0]
==
main里的y,传给scanf的变量地址也就是main里y的地址,所以y接受到了b函数中scanf的输入
2的实质是传递变量的地址,然后通过地址修改实参,1则是传递变量本身的值
c里面如果想通过形参修改实参,只能使用2的方法
void
b(struct
a
x[
])
等价于
void
b(
struct
a*
x
)
使用堆内存,然后传递一个指向这个结构体的指针就可以了,
或者直接向子函数传递结构体变量.
比如:
#include stdio.h
#include malloc.h
typedef struct STRC_def{
int i;
int j;
}STRC;
int Func1(STRC * pSTRC);
int Func2(STRC aSTRC);
int main()
{
STRC * a =(STRC *)malloc(sizeof(STRC));//使用堆内存
STRC b;//使用栈内存
a-i=0;//初始化
a-j=0;
b.i=0;
b.j=0;
Func1(a);//传递指针
Func2(b);//传递变量
printf("a: %d %d\nb: %d %d\n",a-i,a-j,b.i,b.j);//结果应该是 a: 1 2 \n b: 0 0
//因为传递指针使用的是同一个存储位置,而传递变量使用的是内容复制的存储位置
return 0;
}
int Func1(STRC * pSTRC)
{
pSTRC-i=1;
pSTRC-j=2;
return 0;
}
int Func2(STRC aSTRC)
{
aSTRC.i=3;
aSTRC.j=4;
return 0;
}