社区
C语言
帖子详情
关于数据结构里形参和实惨的传递问题
WinckyZ
2003-07-03 09:35:56
什么时候用指针,什么时候用二级指针呀?
为什么*head本身就是指针型结构体的首地址,而他当实参时又要用&head来传递,形参用二级指针来接收呢?
不能直接用指针来接收形参head吗?
偶到现在还对链表的这一问题百思不得其解
各位高手能不能也举例子帮我解释清楚一点
谢谢
...全文
196
5
打赏
收藏
关于数据结构里形参和实惨的传递问题
什么时候用指针,什么时候用二级指针呀? 为什么*head本身就是指针型结构体的首地址,而他当实参时又要用&head来传递,形参用二级指针来接收呢? 不能直接用指针来接收形参head吗? 偶到现在还对链表的这一问题百思不得其解 各位高手能不能也举例子帮我解释清楚一点 谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
liao2001
2003-07-03
打赏
举报
回复
你先明白一级指针先:
int a=0;
func(int *a)
{
*a=12;
}
为什么要传递指针,因为函数入参是值传递。不知道你学过汇编没有,入参是push入栈,再在函数内pop出栈来实现传递的,也就是通过栈间接传递的。如果你传递的不是指针,比如:
func(int a)
{ a=12; }
那么,你修改的仅仅是栈中a的copy,而不是a;
再来看func(int *a)的入参a:
int a;
int *p=&a;
func(p);
其中,参数传递的时候干了什么呢?把p的值push入栈了(注意,是p的值,即a的地址)。也就是说,栈中放着p的copy了。
假如现在你想改变a的值,只要对传入的地址进行操作就行了。
那么假如你是想改变p的值呢?这样行不行:
func(int *cp)
{ cp=123;}
cp=123;仅改变了栈中p的copy的值,与p无关,所以这样是不能修改p的,再看:
func(int **cp)
{ *cp=124;}
func(&p);
现在呢?我们传入了p的地址,也就是说栈中有了p的地址(&p的copy),那么我们通过*操作就可以访问p了。
不能理解的话,先记住一条:入参总是值传递,要想改变函数外的变量的值,就必须传入变量的地址。
蝎子i软件
2003-07-03
打赏
举报
回复
首先,指针变量是一个变量。它和别的变量的区别是:别的变量一般存储的是内容,也就是程序里直接要用的数据;而指针变量存储的是某一个存储单元的地址值,利用这个地址值,可以找到该存储单元,然后就可以对该存储单元的数据进行读/写操作。
例如:int a, *b; //a是个普通的int型变量,它其实就是某个存储单元的名字。
//b是个int型的指针变量,它存储的值是一个地址值,
//这个地址值指向的内存单元的内容将被当作int型看待。
a=1; //把存储单元a的内容设置为1
b=&a; //把存储单元a的地址值赋给b
//现在,b的内容是存储单元a的地址值;
//通过*b,可以获得b所指向的存储单元a的内容;
//其实,*b也就是a了。
如果理解了什么是指针变量,就很好理解二级指针了。
二级指针变量也是一个变量,它和普通指针(一级指针)变量的区别是:
普通指针变量所指向的存储单元的内容是可以直接用的;
二级指针变量所指向的存储单元(其实是个指针)的内容是另一个存储单元的地址,通过这个地址,可以访问到这个存储单元。
例如:int a, *b, **c; //b是普通的指针变量,c是二级指针变量
a=1;
b=&a;
c=&b; //把指针变量b的地址值赋给c
//现在,存储单元c里的内容是存储单元b的地址值;
//通过*c可以找到b存储单元,并把b里的内容当作地址址看待;
//因为通过*b可以找到存储单元a,
//所以*(*c)也可以找到存储单元a。
point_to
2003-07-03
打赏
举报
回复
建议自己编个链表,慢慢体会,会清楚的!
wlfjck
2003-07-03
打赏
举报
回复
明白这一点,当你想修该某个地址里面的内容是,你需要取得这个地址
老鱼趣多多
2003-07-03
打赏
举报
回复
up
数据结构
基础--指针,结构体,typedef,
形参
实参详解、区分
在学习
数据结构
线性表的时候,遇到了一些
问题
,像指针,结构体,typedef,
形参
实参等较为抽象的概念,以及它们之间的联系,在此整理记录一下。 目录 一、实参与
形参
(一)定义 (二)二者的区别与联系: (三)易混点:
形参
和实参的三种
传递
方式: 1-值
传递
2-址
传递
3-引用(重) (四)
形参
、实参的
传递
方式的区别: 二、结构体 (一)、定义结构体 1.基础知识 2.结构体的嵌套 3.结构体变量使用的注意事项 (二)、结构体的初始化 (三)、结构体数组 四、struct与typedef的结合
形参
、实参以及参数的
传递
实参是函数调用时提供的参数的值,用于
传递
给函数定义中对应的
形参
。
形参
的数量和类型必须与实参的数量和类型匹配,即在函数调用时,提供的实参个数和类型要与函数定义中的
形参
一致。
传递
实参给
形参
时,实参的值被复制到
形参
中,函数内部对
形参
的修改不会影响实参的值。在函数调用时,实参的地址被
传递
给
形参
,函数内部可以通过解引用指针来修改实参的值。在函数调用时,实参的值被复制到
形参
中,函数内部对
形参
的修改不会影响实参的值。位置匹配:实参按照
形参
的顺序进行对应,位置相同的实参
传递
给对应的
形参
。
【
数据结构
】
形参
/值参/实参的区别
1引用参数(&) 引用参数是实参的别名,所谓别名就是同一变量的另外一个名字 对引用参数的操作就是对实际值参的操作 #include<stdio.h> void fa(int a){ a++; printf("in fa:a=%d\n",a); } void fb(int &a){ a++; printf("in fb:a=%d\n",a); } in...
关于
形参
与实参 按值
传递
和按址
传递
一点总结
形参
与实参: 如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值。 C语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处,这两个地方的参数是有区别的。
形参
(形式参数) 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收
传递
进来的数据,所以称为形式参数,简称
形参
。 实参(实际参数) ...
C语言函数的
形参
传递
介绍C语言
形参
的
传递
,值
传递
和地址
传递
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章