| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 373 人关注过本帖
标题:c语言小问题
只看楼主 加入收藏
小月不在
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-1-9
收藏
 问题点数:0 回复次数:3 
c语言小问题
#include <stdio.h>
void fun (char *c,int d)
{  *c=*c+1; d=d+1;
printf("%c,%c,",*c,d) ;
}
main ( )
{  char  b='a',a='A';
fun(&b,a) ;   printf("%c,%c\n",b,a) ;
}程序运行后的输出结果是a
A)b,B,b,A    B)b,B,B,A    C)a,B,B,a    D)a,B,a,B


为什么呢?
搜索更多相关主题的帖子: include c语言 
2015-01-09 15:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
这个题目主要就是传值和传址的问题,传值参数其原始值并不发生变化,但是传址,其原始值就有可能发生改变

DO IT YOURSELF !
2015-01-09 15:32
孤狼1号
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2014-12-25
收藏
得分:0 
你要明白在c语言中,要用子函数修改主函数中的变量值,必须将主函数中变量的地址传给子函数,所以,在主函数中b的值改变了,而a的值没有改变
2015-01-09 17:35
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
学习C语言,首先要分清楚变量的两层含义:第一层是指储存变量的内存空间,也就是一些书上说的“左值”;另一曾意思是变量的值(说白了就是个常量)。
第一层意思中说的内存空间就是内存中能够被访问的的地方(内存地址),具体就是能够存储数值,也能够取出其中的值。

第二层意思可能不大好理解,为什么变量的值又成常量了呢?举个例子
int val = 5;
这一句干了两件事:
1、分配一个int类型对应大小的内存空间,把这个内存空间和val关联起来(val的内存地址就是那个分配的地址)。
2、在这个空间中储存数值5。
执行下面这一句:
val = val +1;
1、首先找到等号右边的val的内存空间,并且取出其中的数值5并传送到CPU
2、把数值5加上1,计算结果为6(这一步只于CPU中的寄存器有关,和内存没有关系,也就是说和val没有关系)
3、把计算结果(数值6)再次保存到等号右边val对应的内存空间中。(这一点说明,等号左边的值必须一个内存空间(内存地址),而不是某个变量的值,更不是一个常量。)
看第二步会发现,从数值5到数值6,只是从一个常量改变到另一个常量,这过程中val中的值仍然是数值5。
所以,我们说的变量通常指的是某部分内存空间,而不是其中保存的值。对于内存空间中的值来说,在变为另一个值之前,它一直是不变的,所以说,内存空间中保存的并不是变量,而是常量。

这就引发了C语言编程中经常混淆的值传递还是引用传递(非常抱歉,因C#语言编写的时间相对长些,类似的东西在C语言中到底叫什么不记得了,暂且叫引用传递吧。)
值传递是指传递变量中的值(就是内存空间中的那个常量)。
引用传递是指传递变量的内存地址。
这样的话就会发生下面两种情况:
1、给函数传递值(值传递)的话,不论函数中如何处理这个值,都是在处理这个常量,并没有处理原来那个变量内存空间中的值。
2、给函数传递引用(引用传递)的话,不论函数中如何处理,都是处理原来那个变量内存空间,其中的值也就改变了。
2015-01-09 18:16
快速回复:c语言小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011315 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved