首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C 语言】结构 ( 结构作为函数参数 | 结构指针作为函数参数 )

文章目录 一、结构作为函数参数 二、结构指针作为函数参数 三、完整代码示例 一、结构作为函数参数 ---- 结构变量 作为函数形参 , 在函数中 , 只能访问 该函数形参 , 无法修改 结构体内存...---- 结构指针变量作为参数 , 可以 通过 指针 间接赋值 , 在该函数中 , 将 from 结构指针指向的变量 拷贝到 to 结构指针指向的变量 ; 注意 : 函数中传入的是 指向 结构变量的指针..., 不能直接传入结构变量 , 如果直接传入结构变量 , 该结构变量直接在本函数中的栈内存中起作用 , 函数执行完毕后 , 栈内存的结构变量 直接回收 ; 代码示例 : /** * @brief...* 将 from 结构变量拷贝到 to 结构变量中 * 注意 : 函数中传入的是 指向 结构变量的指针 , 不能直接传入结构变量 * 如果直接传入结构变量 , 该结构变量直接在本函数中的栈内存中起作用...* 将 from 结构变量拷贝到 to 结构变量中 * 注意 : 函数中传入的是 指向 结构变量的指针 , 不能直接传入结构变量 * 如果直接传入结构变量 , 该结构变量直接在本函数中的栈内存中起作用

3.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    结构作为函数的参数

    1.传递结构成员 > 只要结构成员是一个具有单个值的数据类型,便可把它作为参数传递给接受该特定类型的函数。 > 使用这种方式为函数传递参数与普通变量作为参数相同,都是以传值的方式传递的。...char title[50]; char author[50]; }Shot; void modify(float stdata); modify(Shot.price); > 如果在被调函数中要修改结构成员的值...2.传递结构 > 使用结构变量作为函数的参数时,也是传值的,会将结构变量的全部内存单元的内容拷贝一份传递给被调函数。被调函数的形参也必须是同类型的结构类型。...为了解决以上问题,使用结构指针是一个更好的办法。 > 需要注意的是,结构变量名与数组变量名不同,结构变量名不是它的地址。...modify中,要使用指向运算符->访问结构成员或者使用括号,因为他的参数是一个结构指针 > 实参还有第二种写法,将实参直接定义为结构指针 struct book { float price

    2.1K10

    C语言结构指针_C语言函数返回结构指针

    文章目录 结构概述 结构指针 动态存储分配 .malloc函数 .calloc函数 .free函数 结构概述 问题定义:有时需要将不同类型的数据组合成一个有机的整体,以便于使用,...答(4+20+1+4+4+30 = 63) (3)直接定义结构类型变量其一般形式为: struct{ 成员列表 }变量名 现在我们直到了怎么构造一个结构了,下面要说一下在结构体内引用另一个结构的方法...,也就是在结构体内嵌套另一个结构 首先我们定义一个结构date,由month,day,year组成 在定义说明变量boy1和boy2时,其中的成员birthday被说明为date结构类型...,下面来说结构指针 结构指针 一个结构变量的指针就是该结构变量所占据内存段的起始地址。...可以设一个指针变量,用来指向一个结构变量,此时该指针变量的值是结构变量的起始地址。 同时指针变量也可以用来指向结构数组中的元素。

    3.6K30

    指针与函数结构

    做计算机二级的时候发现指针对函数结构的题目主要出现在选择题上,之前学的不清楚,导致在看到题的时候有种懵懵的感觉,之前对二维数组和指针的复习还不错,于是照着之前的方式开始翻书复习、网上查阅。...对结构的成员的调用方法例如下面实例中的date3.year,通过:结构变量名.成员名 来直接用。...结构针对指针有方便的调用方法指向(->),例如下面实例中的p->year,这就放方便了通过指针来调用成员的步骤。因此我们只要通过结构类型的指针就能指向结构类型的变量。...主要将的是指针与结构的关系,所以关于结构其他方面不多说。而下面代码就很好的解释了关联。...3 4 14 24 35 我是通过结构指针通过p的指向结构变量地址输出的 1 2 3 10 20 30 2 3 4 14 24 35 我是通过结构指针通过p的指向结构变量地址并通过p1指向p->

    51830

    Go 结构函数调用底层实现

    上文已经提及,Go 语言结构并非 Java 和 C++ 语言中 class 的概念,下面我们来了解一下结构变量声明和相关函数调用在机器码或汇编层面的体现。我们以下面代码为案例进行分析。...可以看出汇编代码会首先将 Cat 结构的类型指针加载到栈顶,作为参数;然后调用 newObject 函数来在堆上按照 Cat 结构类型分配对应的空间,并返回空间的起始地址;最后使用该起始地址设置结构的变量...我们可以看到,当结构分配在栈上时,其内部成员变量会依次排列,占据各自固定的空间;而结构分配在堆上时,其在栈上只会存在一个指向堆地址的指针,该指针指向结构在堆上的起始位置。...值接收器函数 下面我们来看一下结构作为函数接收器如何进行函数调用,包括如何如何传递参数和返回值,如何进行值接收器和指针接收器转换等。...综上,我们了解了 Go 语言中结构器和结构函数在机器层级方面的底层实现,后续文章我们再继续了解 Go 语言相关特性的底层实现。

    82510

    使用结构作为函数输入参数

    使用结构作为函数的输入参数的话,在更新函数的时候,就没有必要把函数的声明以及所有调用函数的地方全部更新一遍,相对还比较方便,对于输入参数比较多的函数可以使用结构作为输入参数。...常用的有三种方式,分别是:用结构变量作函数参数,用指向结构变量的指针作函数参数,用结构变量的引用变量作函数参数。...用结构变量作函数参数: #include #include struct test { int a; float b[3]; } void...,采取的也是“值传递”方式,结构变量作为函数的参数,修改之后的成员值不能返回到主调函数,这往往造成使用上的不便,因此一般少用这种方法。...结构指针变量作为函数的参数,修改后的结构成员的值能返回到主调函数,并且,在调用函数期间,仅仅建立了一个指针变量,大大的减小了系统的开销,提高了运行效率。

    2.9K30

    【C 语言】结构 ( 结构 数组 作为函数参数 | 数组 在 栈内存创建 )

    文章目录 一、结构 数组 作为函数参数 ( 数组 在 栈内存创建 ) 二、完整代码示例 一、结构 数组 作为函数参数 ( 数组 在 栈内存创建 ) ---- 声明结构类型 : 定义 结构 数据类型..., 同时为该结构类型声明 别名 , 可以直接使用 别名 结构变量名 声明结构类型变量 , 不需要在前面添加 struct 关键字 ; typedef struct Student { char...: 使用 结构数组 作为参数 , 可以进行间接赋值 , 修改该 结构数组 的元素 , 可以当做返回值使用 ; 此时结构 数组 会退化为 结构指针 ; /** * @brief sort_struct_array...对结构数组 按照年龄进行排序 * @param array 结构指针 * @param count 结构数组的元素个数 */ void sort_struct_array(Student...数据类型 , 同时为该结构类型声明 别名 * 可以直接使用 别名 结构变量名 声明结构类型变量 * 不需要在前面添加 struct 关键字 */ typedef struct Student

    1.6K20

    【C 语言】结构 ( 结构 数组 作为函数参数 | 数组 在 堆内存创建 )

    文章目录 一、结构 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二、完整代码示例 一、结构 数组 作为函数参数 ( 数组 在 堆内存创建 ) ---- 在上一篇博客 【C 语言】结构 ( 结构...数组 作为函数参数 | 数组 在 栈内存创建 ) 的基础上 , 将 栈内存 中的 结构数组 , 更改为 堆内存 中创建结构数组 ; 在堆内存中 , 创建 结构数组 : 传入 二级指针 , 该指针...指向 结构 指针 , 传入 二级指针 的目的是 , 可以在函数中 , 通过形参 间接赋值 , 达到返回创建堆内存的目的 ; /** * @brief create_student 堆内存中分配内存...数据类型 , 同时为该结构类型声明 别名 * 可以直接使用 别名 结构变量名 声明结构类型变量 * 不需要在前面添加 struct 关键字 */ typedef struct Student...} } /** * @brief sort_struct_array 对结构数组 按照年龄进行排序 * @param array 结构指针 * @param count 结构数组的元素个数

    1.5K30

    CC++ 反汇编:函数结构

    C语言提供给我们了一些由系统定义的数据类型,我们也可以自己定义这样的数据类型,结构与共用就是用来定义一些比较复杂的数据结构的这么一个方法,定义结构很简单只需要使用struct关键字即可,定义共用则使用...需要注意的是,结构类型与结构变量是不同的概念,通常结构类型的定义并不会分配空间,只有结构变量被赋值后编译器才会在编译时对其进行处理,结构类型与结构变量,其在内存中的表现形式都是普通变量,而结构则是编译器对语法进行的一种处理...: 结构数组中每个数组元素都是一个结构类型的数据,他们都分别包括各个成员项....: 结构指针就是指向结构变量的指针,结构变量的前4字节就是该结构的指针,将该指针存放到一个指针变量中,那么这个指针变量就可以叫做结构指针变量,结构指针定义如下....: 将函数的形参列表定义为结构参数,该函数就可以接收一个结构列表了,收到列表后我们可以取出里面的最大值并返回.

    1.1K40

    linux时间相关结构函数整理

    一般通过 time_t time = time(NULL); 获取. (2) struct timeb结构: 主要有两个成员, 一个是秒, 另一个是毫秒, 精确度为毫秒. 1 struct timeb...microseconds */ 5 }; 由int gettimeofday(struct timeval *tv, struct timezone *tz);获取. struct timezone结构的定义为...获取特定时钟的时间,时间通过tp结构传回,目前定义了6种时钟,分别是 CLOCK_REALTIME                                         系统当前时间,从1970...注意: 这边三个函数都是线程不安全的, 要使用线程安全的版本, 需要使用带_r的版本 — gmtime_r, localtime_r, mktime_r....二、 延迟函数 主要的延迟函数有:sleep(), usleep(), nanosleep(), select(), pselect(). 1 unsigned int sleep(unsigned int

    2.9K50

    结构数组在函数之间传递数据

    结构数组在函数之间传递数据 结构数组作为函数参数在函数之间传递数据时,要求形参和实参是相同结构类型声 明的数组,进行函数调用时,实参将数组名中存放的数组首地址传递给形参数组名。...这样,实参数组名和形参名代表的是同一个结构数组,因此在被调函数中对数组元素结构变量的值进行修改后,回到主调函数通过实参数组名访问数组时,可以发现这个改变。 【例】选举投票程序。...【思路分析】这是一个数组排序的问题,下面定义一个函数sort解决该问题,采用冒泡排序算法。...源代码如下 #include #include struct candicate //定义候选人的结构类型 { char name[]; //姓名

    1.9K30

    C语言结构类型定义+结构变量的定义与使用及其初始化+结构变量作为函数参数

    上一篇文章:返回指针值的函数+指向函数的指针+main()函数的参数 C语言结构类型定义+结构变量的定义与使用及其初始化+结构变量作为函数参数 结构 引例 结构变量的定义 结构变量的使用...结构变量作为函数参数 结构变量的初始化 下一篇文章 结构 引例 输出平均分最高的学生信息 #include struct student { int num; char name...,math; double average; }stu1,stu2;//定义两个结构变量; 1234567 省略了结构类型的名字,在这种情况下,结构变量只能在后面同时定义,而不能在主函数中定义...,不能直接用“=”,即s1.name="张三";是错误的,必须使用字符串复制函数strcpy()函数来实现,如:strcpy(s1.name,"张三"); 同一类型的结构变量间可以赋值 如:...stu2=stu1;将结构变量stu1里面的所有成员变量的值分别对应赋给结构变量stu2 结构变量作为函数参数 结构变量的成员作为函数的实参,形参为普通变量或数组 也可以将结构变量作为函数的参数

    2.4K20
    领券