结构体的指针和C语言函数传参

本文探讨了C语言中函数传参的本质,无论是传值还是传地址,都涉及到参数的复制。重点讲解了在链表、二叉树操作中为何需要使用二级指针来改变next指针的指向。同时,文章讨论了结构体指针的问题,指出`*pp`是结构体首元素的地址,而`pp`存储的是堆上的结构体地址,用于指向结构体本身。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构的基础,是函数的传递和结构体的应用。

首先从函数传参做起笔记,c语言函数传参的本质都是传值。我的大学教材上举例为传值和传地址;

我借用百度上的一些回答作为引用:

(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。
(2)传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。

在C++11中,推荐对参数的使用上使用传引用更加安全;写c with class那种c语言,也可以使用传引用,hhh;

传值和传地址的本质都是传入函数(建立函数栈帧)而不论是单纯的传入int a参数,还是int* pa,都是传入值的一个复制。

这里的重点就是传入函数的 ,是参数的复制

所以我们在c++和c语言程序编写的时候,要注意函数传参的实际问题。

最经典的一个例子就是网上很多的swap函数,我在看书学习时,举例也是这个(代码参考《c和指针》)。

void swap(int* first, int *second)
{
	*first = *first^*second;
	*second = *first^*second;
	*first = *first^*second;
}

在链表操作,二叉树操作时,如果要改变next指针(或者子孩子指针)指向,这个时候传入的参数应该是二级指针,这样在函数体内部获得的就是next指针的地址的拷贝,通过对这个拷贝解引用,才能获得真正的next的指针。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值