将结构体数组作为参数传递给函数后的调用问题
发布网友
发布时间:2022-04-20 01:19
我来回答
共4个回答
热心网友
时间:2023-07-17 03:00
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) ;
}
热心网友
时间:2023-07-17 03:00
数组指针的定义不正确,应该是a* b[];
fun(a* b[], int x)
给你举个例子:
主要用于遍历打印
struct A
{
int a;
char b;
};
void fun(A* arr[], int x)
{
int a = 0;
char b = 0;
int index = 0;
for (index = 0; index < x; index++)
{
a = arr[index]->a;
b = arr[index]->b;
printf("arr[%d]: a(%d), b(%c)\n", index, a, b);
}
}
int main(void)
{
const int MAX_SIZE = 10;
A *a[MAX_SIZE] = {0};
int nPos = 0;
for (nPos = 0; nPos < MAX_SIZE; nPos++)
{
a[nPos] = new A;
a[nPos]->a = nPos + 1;
a[nPos]->b = 'k';
}
fun(a, MAX_SIZE);
return 0;
}
热心网友
时间:2023-07-17 03:01
可以,不过是b[i].b; 而不是b[i]->char追问这两种方法有什么区别我也不太明白,还有请问如果是fun函数里一个子函数要调用某个结构体里的元素的话,我是直接把结构体指针传给它fun2(a * b),还是类似fun2(b.[i].b)这样直接传我要操作的某个结构体?
追答晕. 都行吧. 随便你喜欢.
我建议变量和类型还有数据成员的名字什么的都改一下. 又a又b的重复来重复去很容易搞混乱
热心网友
时间:2023-07-17 03:01
ok的,b[i]->a、b[i]->b
将结构体数组作为参数传递给函数后的调用问题
1、结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。2、例程:typedef struct Student{ char name[10] ; int age ;}Student;#define LEN 10 //print all Student infoma...
结构体数组的调用函数问题
这个函数这样定义就可以了:void xs(student *ptr,int num);//其中ptr为一个指向student的指针,num为元素的个数。调用该函数的语句为 xs(a,30);//xs()函数 void xs(student *ptr,int num){ for(int i=0;i<num;++i){ ptr[i].xh=10;//在这个循环里面就可以进行操作了,ptr与a操作同...
如何把结构体数组作为实参传递给函数?
void repeat(city *la,char * name,int x,int y)因为char name[10]是数组,而函数的参数为字符,所以调用失败。结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。
C语言中结构体数组名作为函数参数的问题
函数定义和声明的参数应该是: int oid_check(struct snmp_seq sp, struct rmc1207 * ramp, int BUFFER_SIZE);函数调用: flag=oid_check(sp, ramp, BUFFER_SIZE);--- 在这里, ramp 是结构体数组的指针
c语言中的结构体二维数组做参数问题
1、如果在函数外定义的结构数组,又要在一个函数中进行输入、输出,通常情况下,其参数传递类型需要传址,即 void shuchu(struct std **cansu);void shuchu(struct std *cansu[]);这样调用改为 shuchu(&aa);对函数内的相应操作改为指针操作即可。2、通常情况下,对于一个系统设计而言,其输入...
C++ 结构体数组 引用类型作为函数形参时,编译错误,提示“引用”使用的...
只要把print函数定义和声明处的参数中 & 符号去掉就行了,你加上这个符号愿意可能是想按引用使用参数,但是pstud[]是数组,直接使用它就是使用他的地址,也即按引用使用,所以不必加它。而你非要用&,则相当于传递了一个指针,但是这个类型的指针并不是指向pstud结构体的指针,而是指向pstud[]类型的...
定义了一个参数为结构体数组的函数,怎样才能在主函数中调用?
结构体的定义应该放在函数外面 include "stdafx.h"#include <stdio.h>struct sort{ double dec; int s,t;};void creat( struct sort savesort[]){ printf("___");}int main(int argc, char* argv[]){ struct sort savesort[6]; creat(savesort);return 0;} ...
...我用结构体指针当作结构体数组 在一个函数里参数是这个结构体指针...
结构体指针是一个地址,函数调用的时候传递的实参也是地址。如果你定义的这个结构体实例是一个全局变量,或者它的作用范围在你所说的那两个函数之内。那你先调用一个函数输入,再调用一个函数输出就没问题了。
如果函数的输入参数超过3个,51单片机怎么办
将所有参数存储在一个数组中,然后将该数组传递给函数。函数可以通过数组索引查找和访问每个参数。这种方法需要使用一些额外的代码来处理数组和索引,但可以简化函数调用,并允许传递更多的参数。2. 使用结构体 创建一个包含所有参数的结构体,将结构体作为单个参数传递给函数。函数可以通过结构体成员访问每个...
Go切片作为函数参数时的一些思考
这一点非常重要,这也就意味着,将切片作为函数参数时,其传递机制与结构体传递机制一样,都是值传递,也即传递的是原切片的拷贝。另外一个非常重要的点就是,切片结构体中的array是一个指针,意味着array的值是底层数组的地址,通过函数传参后,这个值依然没有改变。因此可以看到,当把切片作为函数...