c语言-求解C程序里第二个printf的结果为何是3,7,7呢?

问题描述

求解C程序里第二个printf的结果为何是3,7,7呢?

int k=7;
void f(int **s)
{
int t=&k;
*s=t;
_printf("%d,%d,%d,",k,*t,
*s);_
}
main()
{
int i=3,*p=&i,**r=&p;
f(r);
printf("%d,%d,%dn",i,*p,**r);
}
/*
VC++程序运行结果为:
7,7,7,3,7,7
*/
求解C程序里第二个printf的结果为何是3,7,7呢?如果f(r)把r的地址改变了,p的地址也跟着变吗?那i的地址不是也跟着p也改变了吗?结果应该是7,7,7啊?求大侠帮忙解答

解决方案

这个问题和你提的另一个问题,突破点都一样,我已经回答了。把 “变量”“ 指针” “指针的指针”这三个概念理解透了,这类问题你就不会再困扰了。
他们最终牵涉到两个概念“地址” “值”
比如一条无限长的走廊上有无限多个房间,我们每个房间给一个唯一门牌号 1、 2 、3、 5 ……
这个编号就是每一个房间的“地址”,房间里面放的物品就是它的“值”
变量:就相当于一个房间, 它有一个编号,而且里面放物品。
指针:相当于两个房间,一个房间里面存放的是另一个房间门牌号,我们需要通过房间里面的门牌号才能找到存放物品的房间取得物品。
指针的指针:相当于3个房间,第一个房间里放着第二个房间的门牌号,第二个房间里放着第三个房间的门牌号,第三个房间里存放的才是物品,
我们必须通过前面两个房间才能找到存放物品的那个房间取得物品。

解决方案二:

变量的地址是不会变的,f(r)之后是p的值变了,就是p不指向i了,但是i的值还没变。

解决方案三:

k是变量7.

s指向k的地址。

i是变量
p指向i的地址
r指向p的地址

星r是i的地址
f把r改为k的地址
没有改变i

时间: 2024-10-03 23:15:56

c语言-求解C程序里第二个printf的结果为何是3,7,7呢?的相关文章

c语言-求解C程序问题,f(r)后第二个printf结果为何是3,3,3呢?

问题描述 求解C程序问题,f(r)后第二个printf结果为何是3,3,3呢? #include int k=7,m=5void f(int **s){ int t=&k; _ _s=&t; _ _*s=&m; _ _printf("%d,%d,%d,",k,*t,*s);} main(){ int i=3,*p=&i,**r=&p; f(r); printf("%d,%d,%dn",i,*p,**r);} /*VC++程序运

r语言-在C# 程序里 调用R语言 调用完R语言后C#程序也跟着结束了,怎么让他不跟着结束呢?

问题描述 在C# 程序里 调用R语言 调用完R语言后C#程序也跟着结束了,怎么让他不跟着结束呢? 我程序里调用R语言的代码是这样的 REngine.SetEnvironmentVariables(); REngine engine = REngine.GetInstance(); engine.Evaluate(R_cmd); engine.Evaluate("q()"); engine.Dispose(); 这样有什么问题吗? 解决方案 你C#怎么写的?控制台程序可以加上一个Cons

c语言-定义数组的初始值为0,结果在程序里涉及到了除法。

问题描述 定义数组的初始值为0,结果在程序里涉及到了除法. 定义数组的初始值为0,结果在程序里涉及到了除法,但是由于有判断,所以不会出现0做除数的问题,可是电脑可能认为我的程序会出现这种问题,然后就说程序错误,不让我执行,应该怎么办 解决方案 电脑怎么判断你除0了的,不应该会让你程序出错的 解决方案二: 不会,这是运行时错误,编译时不会判断的 解决方案三: 你用的什么编译器?一些编译器可能有编译期间的检查,你直接写 1/ 0作为表达式,因为编译器会在编译的时候试图替换成常量,因此会报错. 解决方

浅谈C语言编程中程序的一些基本的编写优化技巧_C 语言

大概所有学习C语言的初学者,都被前辈说过,C语言是世界上接近最速的编程语言,当然这并不是吹牛,也并不是贬低其他语言,诚然非C语言能写出高速度的代码,但是C语言更容易写出高速的程序(高速不代表高效),然而再好的工具,在外行人手中也只能是黯淡没落. 对于现代编译器,现代CPU而言,我们要尽量迎合CPU的设计(比如架构和处理指令的方式等),虽然编译器是为程序员服务,并且在尽它最大的能力来优化程序员写出的代码,但是毕竟它还没有脱离电子的范畴,如果我们的代码不能让编译器理解,编译器无法帮我们优化代码,那么

c语言-C语言的一个程序,求大神

问题描述 C语言的一个程序,求大神 三.实验内容 1.实验题目:手动输入10个0~100之内的整数,按从小到大排列输出.: (1)要求 排序算法: 使数组从小到大排序的规则如下: ⑴ 设数组为a[0],a[1],-,a[n-1],构造i循环从0,1,-,n-2变化,构造j循环从i+1,i+2,-,n-1变化,即j>i. ⑵ 对于任何一个a[i],如果a[i]>a[j],表面前面有一个元素a[i]比它后面的元素a[j]大,a[i]应该在后面,a[j]应该在前面,交换a[i]与a[j]. ⑶ 对于

用BASIC语言写智能手机程序

前言 时下,智能手机越来越贴近我们的生活,越来越多的教师朋友,学生朋友都会用智能手 机,因为她们功能齐全,在手机上运行的软件应有尽有,QQ.在线游戏,音乐影视--.. 对于大学生朋友,广大教师朋友,能够在自己的手机有一个动态的课程表程序,一来可以合理安 排空余时间,二来又不会误了学习工作的时间,是一件非常不错的事.本文,以微软公司的移动手机 平台 WindowsMobile2003为基础,简单实现手机上的课表程序. 程序在 WindowsMobile2003 dopod818手机上测试通过.程序

c++-各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现?

问题描述 各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现? 对于程序运行过程中卡死已经能检测,但是对于一些弹框类的运行出错却不知道怎么检测,请各位大虾指点迷津; 现在没有C币,如果回答是我想要的,我花钱补上 解决方案 这不就是编写一个华医生么(注:华医生是微软系统上负责处理应用程序崩溃的程序,就是你图上的"xxx已停止工作,Windows正在联机查找解决方案"),这是一个应用程序,是在用户模式下实现的,而并非在内核中实现,其实华医生也可以卸

求解决-怎么用C语言编写这个程序,求指教

问题描述 怎么用C语言编写这个程序,求指教 本题要求编写程序计算某年某月某日是该年中的第几天. 输入格式: 输入在一行中按照格式"yyyy/mm/dd"(即"年/月/日")给出日期.注意:闰年的判别条件是该年年份能被4整除但不能被100整除.或者能被400整除.闰年的2月有29天. 输出格式: 在一行输出日期是该年中的第几天. 输入样例1: 2009/03/02 输出样例1: 61 输入样例2: 2000/03/02 输出样例2: 62 解决方案 网上一搜有很多,c

c语言绘图-关于c语言绘制图形程序

问题描述 关于c语言绘制图形程序 在用c语言画图时,设置背景颜色 为什么有好多颜色不能用 还有那个填充色 只有个别能用 最终显示的跟程序写的不一样 是电脑需要安装什么还是怎么回事? 解决方案 你用的是控制台程序的话,只能用16种颜色,如果是windows gui程序,才可以使用丰富的颜色. 解决方案二: 你是写的控制台程序还是windows窗口程序?代码贴出来看看. 解决方案三: 控制台中的程序你用system("color 7c");这样的system()函数就行: 若要是用grap