这个C语言题怎么做?那个 int k=7怎么在主函数,定义函数外面,而且结果为什么是那样?
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/10/01 03:30:14
这个C语言题怎么做?那个 int k=7怎么在主函数,定义函数外面,而且结果为什么是那样?
k是全局变量,可以在定义的地方到程序结尾的任意函数内调用.一般全局变量是数组,为了防止爆栈(这个你以后会知道).当某个函数内定义了相同的变量时,会在这个函数内使用函数内定义的,否则使用全局的.(定义(名称)相同的变量容易出错(其实是按照两个变量来存储的,涉及到堆栈,了解即可),请尽量避免)
首先不得不说我也是长见识了.这个程序让我也学到不少.
原来在函数内传指针是绝对引用,作用类似于int f(int &a).这是int型的绝对引用方式
相当于在函数内改变这个值时,调用这个函数的函数内相应的值也会改变
这样来按步骤说一下吧
i=3,*p=3 **r=3
进入f函数
s就是r
*t=7
*s=*r=p=t *p=7
这里比较关键,*s=r 的意思是s所指的变量(p)赋值为r,即p所指的东西改变为7
输出.
结束分析
讲的可能有一点跳跃,
再问: 可能跳跃的幅度太大了,按步骤分析没看懂啊
再答: 昨天晚上有点赶。。
是这样子的,i是int型变量,p是指向int型变量的指针,r是指向*int型的指针(这里有点逗。。)
*p指向的是一个int,*r指向的是一个*int,**r指向的是一个int(这里一定要理解!)
好。。我们从主函数进行分析
第一行:定义变量,i=3,*p=3,*r=p(即**r=3)
第二行:引用f函数
这里注意,我们传入f函数的是r,而根据我对程序运行的观察,对于所有传入函数的指针,在函数内的改变会反应到传入的变量上。分段输出后,可以发现它是这样改变的:把*s(就是p)换成t,这样指向p的r会指向改变值的p上
进入f函数
第一行:定义t,*t=7
第二行:赋值,*s=t(这里改变r的步骤是按顺序的:p=t,所以*p=*t=7,然后又因为r指向p没有变,所以*r=p,**r=*p=7)
第三行:输出“7,7,7,”
回到主函数
第三行:输出"3,7,7\n"
这样应该比较清楚了吧
顺便讲一下昨天我讲的步骤分析有一小部分是错的,这是改正后的
如果有不懂请追问。。指针什么的还是搞清楚比较好
再问: 还有那个全局变量k=7和那种符号常量define k 7 一样不
再答: 不一样。。#define k 7是把所有的k替换成7。。这时如果你有个函数是ok(),那么函数名会自己替换成o7()。。一般来说全局变量在竞赛编程常用(调用方便),真正实际上万行的大程序很少使用(相对而言容易重名出错)。。#define连竞赛都不太常用(容易出错),更不用说大程序了。。
再问: 再问一道关于C语言地址传递的题?*t的值为什么是5,k,*t,**s的值为什么都是3
再问:
再答: Orz刚做了一遍,一开始也是错了
是这样的。。
s=&t和*s=t这两者的不同是没有改变p的值
上一道题,*s=t改变了p的值,那么指向p的r也是会改变的
这题中,s=&t没有改变p的值,对p不会构成影响,r的值也不会改变
(其实我做这种读程序也是很烂的囧)
不懂请追问
P.S.下次的图请转成正的,电脑看会舒服一点。。
首先不得不说我也是长见识了.这个程序让我也学到不少.
原来在函数内传指针是绝对引用,作用类似于int f(int &a).这是int型的绝对引用方式
相当于在函数内改变这个值时,调用这个函数的函数内相应的值也会改变
这样来按步骤说一下吧
i=3,*p=3 **r=3
进入f函数
s就是r
*t=7
*s=*r=p=t *p=7
这里比较关键,*s=r 的意思是s所指的变量(p)赋值为r,即p所指的东西改变为7
输出.
结束分析
讲的可能有一点跳跃,
再问: 可能跳跃的幅度太大了,按步骤分析没看懂啊
再答: 昨天晚上有点赶。。
是这样子的,i是int型变量,p是指向int型变量的指针,r是指向*int型的指针(这里有点逗。。)
*p指向的是一个int,*r指向的是一个*int,**r指向的是一个int(这里一定要理解!)
好。。我们从主函数进行分析
第一行:定义变量,i=3,*p=3,*r=p(即**r=3)
第二行:引用f函数
这里注意,我们传入f函数的是r,而根据我对程序运行的观察,对于所有传入函数的指针,在函数内的改变会反应到传入的变量上。分段输出后,可以发现它是这样改变的:把*s(就是p)换成t,这样指向p的r会指向改变值的p上
进入f函数
第一行:定义t,*t=7
第二行:赋值,*s=t(这里改变r的步骤是按顺序的:p=t,所以*p=*t=7,然后又因为r指向p没有变,所以*r=p,**r=*p=7)
第三行:输出“7,7,7,”
回到主函数
第三行:输出"3,7,7\n"
这样应该比较清楚了吧
顺便讲一下昨天我讲的步骤分析有一小部分是错的,这是改正后的
如果有不懂请追问。。指针什么的还是搞清楚比较好
再问: 还有那个全局变量k=7和那种符号常量define k 7 一样不
再答: 不一样。。#define k 7是把所有的k替换成7。。这时如果你有个函数是ok(),那么函数名会自己替换成o7()。。一般来说全局变量在竞赛编程常用(调用方便),真正实际上万行的大程序很少使用(相对而言容易重名出错)。。#define连竞赛都不太常用(容易出错),更不用说大程序了。。
再问: 再问一道关于C语言地址传递的题?*t的值为什么是5,k,*t,**s的值为什么都是3
再问:
再答: Orz刚做了一遍,一开始也是错了
是这样的。。
s=&t和*s=t这两者的不同是没有改变p的值
上一道题,*s=t改变了p的值,那么指向p的r也是会改变的
这题中,s=&t没有改变p的值,对p不会构成影响,r的值也不会改变
(其实我做这种读程序也是很烂的囧)
不懂请追问
P.S.下次的图请转成正的,电脑看会舒服一点。。
这个C语言题怎么做?那个 int k=7怎么在主函数,定义函数外面,而且结果为什么是那样?
C语言.函数定义.long fact(int n) 用这个怎么编出求阶乘的代码,另外编译
C语言问题,请问定义了一个函数swap(int *n int *m),那么这个函数的自变量是n,
C语言怎么定义max函数?
int型函数定义k=-1输出%u型的k值 那么k为多少 该怎么计算
已定义下列函数:int fun(int*p) {return *p} fun函数的返回值是?C语言初学者
C语言中,在main函数一开始定义了 int i;后来又在for语句中有int i 这样的语句,为什么编译时出错.
C语言一题:int i=0; int k=++i+(++i); 为什么K的数值是4?
Matlab能不能像C语言那样定义空函数?
C语言中向一个函数传递一个数组,函数中定义一个指针变量,请问这个指针变量在for循环中要怎么使用?
C语言怎么定义一个函数比较两数大小,
同样一个INT类型定义在main函数里和main函数外面有什么区别