社区
C语言
帖子详情
关于数据结构里形参和实惨的传递问题
WinckyZ
2003-07-03 09:35:56
什么时候用指针,什么时候用二级指针呀?
为什么*head本身就是指针型结构体的首地址,而他当实参时又要用&head来传递,形参用二级指针来接收呢?
不能直接用指针来接收形参head吗?
偶到现在还对链表的这一问题百思不得其解
各位高手能不能也举例子帮我解释清楚一点
谢谢
...全文
171
5
打赏
收藏
关于数据结构里形参和实惨的传递问题
什么时候用指针,什么时候用二级指针呀? 为什么*head本身就是指针型结构体的首地址,而他当实参时又要用&head来传递,形参用二级指针来接收呢? 不能直接用指针来接收形参head吗? 偶到现在还对链表的这一问题百思不得其解 各位高手能不能也举例子帮我解释清楚一点 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
关于
形参
与实参 按值
传递
和按址
传递
一点总结
形参
与实参: 如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值。 C语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处,这两个地方的参数是有区别的。
形参
(形式参数) 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收
传递
进来的数据,所以称为形式参数,简称
形参
。 实参(实际参数) ...
形参
、实参以及参数的
传递
实参是函数调用时提供的参数的值,用于
传递
给函数定义中对应的
形参
。
形参
的数量和类型必须与实参的数量和类型匹配,即在函数调用时,提供的实参个数和类型要与函数定义中的
形参
一致。
传递
实参给
形参
时,实参的值被复制到
形参
中,函数内部对
形参
的修改不会影响实参的值。在函数调用时,实参的地址被
传递
给
形参
,函数内部可以通过解引用指针来修改实参的值。在函数调用时,实参的值被复制到
形参
中,函数内部对
形参
的修改不会影响实参的值。位置匹配:实参按照
形参
的顺序进行对应,位置相同的实参
传递
给对应的
形参
。
数据结构
基础--指针,结构体,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语言规定,简单变量做实参时,它和对应
形参
之间的数据
传递
方式是()。 (A)地址
传递
(B)单向值
传递
(C)由...
参考答案如下语言规应形C由一般来说,各种调查报告在结构上都可分成哪几个部分?定地址B单演示PPT的结尾部分一般建议展示以下内容()。通过startService再次启动Service时,简单间不会再执行onCreate()函数变量蛋白质分子的β-转角属于蛋白质结构中的章太炎是清末民初革命家、做实思想家,是中国近代著名()大师在下图所示电路中,参时参之
传递
传递
传递
A为理想运放,则电路的输出电压约为(...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章