
正文
c语言结构体直接传参,c结构体作为参数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
关于c语言中的结构体数组作为函数参数传递的
结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。
数组作为参数是按地址传递的 数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。
这个选择题的答案是C,即当数组名作为函数参数时,传递给被调函数的是数组的第一个元素(下标为0)的地址。
属于地址传递,在函数里修改的话,将直接影响调用方的数值。这是因为数组名代表这个数组的首地址,不过是静态不可更改的而已。在函数里用引用[i]下标时,就是找到这个数组第i号元素的地址进行修改的。所以是第于是地址传递。
void func(int array[10])void func(int array[])void func(int *array)所以以上三种函数声明完全等同。实际情况是,数组做参数,完全无法按值传递。这是由C/C++函数的实现机制决定的。
相关问答
Q1: C语言定义结构体并赋值后,怎样把整个结构体传递给子函数?
1、void repeat(city *la,char name,int x,int y)改为:void repeat(city *la,char * name,int x,int y)因为char name[10]是数组,而函数的参数为字符,所以调用失败。
2、方法1:void型不传值传址调用与声明。main中声明void date_in(),void date_pout()。函数定义前一定在main()前先定义结构体变量(全局变量),然后定义输入或输出程序段。此时再main()调用即可。
3、参数类型改成 void ,传的时候传指针,使用的时候再强制转换成想要的类型。
4、在 C 语言中,函数参数可以是结构体。定义结构体类型后,可以在函数的参数列表中使用该结构体类型作为参数的类型,从而传递结构体作为函数的参数。
Q2: c语言能向函数里传递任意一个结构体吗?
1、void ,传的时候传指针,使用的时候再强制转换成想要的类型。
2、函数里定义的结构体是局部变量,在这个函数外是不能使用的。你要在函数外定义成全局变量。
3、可以把结构体作为参数啊,不去取地址的意思,是引用的意思,函数执行时修改L的值,就直接的修改了实参的值,相当于地址传递了。真正调用的时,如下:SqList tempStruct;InitList_Sq(tempStruct)这样就可以了。
4、在 C 语言中,函数参数可以是结构体。定义结构体类型后,可以在函数的参数列表中使用该结构体类型作为参数的类型,从而传递结构体作为函数的参数。
Q3: c语言中结构体变量可不可以直接付给同类结构体变量
所以不推荐直接赋值,你可以写一个函数,来实现结构体的赋值功能。
可以的,但需要保证是具有相同结构的结构体变量。可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。
结构体变量是可以直接赋值的。定义结构体类型,然后用这个类型定义出来的变量就是结构体变量。
Q4: C语言里面,传递一个结构体对象时候,这个对象是作为传值调用还是传址调用...
同样是char *类型的参数,有可能是传值,也有可能是传地址。具体取决于函数实现功能。
在传值中函数参数压栈的是参数的副本,任何的修改是在副本上作用,没有作用在原来的变量上。传址中压栈的是指针变量的副本,当你对指针解指针操作时,其值是指向原来的那个变量,所以对原来变量操作。
f(strcut A t) 参数是一个结构体,而结构体说到底就是用户自定义的组合的变量类型。是一个变量。所以这里是按照传数值的方式进行参数传递。
可以把结构体作为参数啊,不去取地址的意思,是引用的意思,函数执行时修改L的值,就直接的修改了实参的值,相当于地址传递了。真正调用的时,如下:SqList tempStruct;InitList_Sq(tempStruct)这样就可以了。
语法上来说,C语言中只有传值调用。一个有参数的函数调用时实际参数会被传递(复制)给形式参数,之后函数体内形式参数是实际参数的副本,两者是不同的对象。这里的复制就是传值的过程。
传值调用,就是函数传递的参数只是值传递,实参把值传递给形参,形参运算后在把值返回。函数中改变的值是不能影响到外界的。
Q5: C语言中,结构体作为函数参数传递,详解?
结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。
将一个结构体变量中的数据传递给另一个函数,有下列3种方法:(1) 用结构体变量名作参数。一般较少用这种方法。(2) 用指向结构体变量的指针作实参,将结构体变量的地址传给形参。(3) 用结构体变量的引用变量作函数参数。
传结构体地址与传结构体指针二者都可以作为传出参数,因为接受函数必须为其定义一个结构指针来接收,这样在函数内就可以修改结构体,在这点上二者没有区别。
这是因为:调用fun1时,所传递的参数p被复制到调用堆栈中,fun1函数所操作是堆栈中的变量而不是原来的那个变量(main中的p);另一方面,调用fun2时,传入的p的地址,fun2通过地址,修改了main中的变量p。
void repeat(city *la,char name,int x,int y)改为:void repeat(city *la,char * name,int x,int y)因为char name[10]是数组,而函数的参数为字符,所以调用失败。
其实,结构名就是一个变量,由于你的形参和你的实参取名是一样的。而且对于形参肯定会变 实参不会变。所以,你中间的maxA变量,其实是子函数的形参变了。
c语言结构体直接传参的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c结构体作为参数、c语言结构体直接传参的信息别忘了在本站进行查找喔。






