二级C语言为什么这道题选a,函数fun改变的值不是在这个函数里才有效吗?

作者&投稿:闭芳 (若有异议请与网页底部的电邮联系)
C语言指针函数的问题。 为什么这道题fun函数不会改变变量的值? 函数形参不是取得地址吗?~

因为交换的并不是值,而是指针。而指针本身是传的值。意思就是在fun中虽然a指向了y,b指向了x但是a、b只是p和q的副本。如果要交换变量值应该用int c,*c=*a,*a=*b,*b=*c。

不是的,是因为你的函数的参数是传值的方式传输的。
也就是理解为,main函数和fun函数是不同的函数,里面的值,就算是相同名字的变量,但实际上是不同的变量,因为他们所在的函数不同。所以main里的xy与fun里的,相互独立。
只是在在fun函数调用的时候,将main中xy的值赋给了fun中的xy;改变fun中的xy,main中的xy并不会改变!

函数的意思是将k数组前n个元素前后调换。
至于你说的为什么k=54321而不是原来的12345:
首先你肯定知道fun的形参a和k是2个变量,所以修改a改变不会影响到k,比如a=1,k不会变成1;但是fun里面改变的不是a的值,而是*a(或者a[i])的值,因为a是指针,指向了k,此时操作a[i]是直接找上了k的家直接篡改,虽然a和k是2个变量,但是a现在有了k的地址,那么通过这个地址就可以修改k里面的值。
fun(int a)和fun(int a[])这类型的函数可以多练习。
下面从函数运行流程解释
假设有个
void fun(int a[])
{
a[0]=1;

}
执行fun(k);
效果流程是
{
int *a;

a = k;
a[0]=1;
}
//此时肯定k[0]==1;

函数参数传递分为传值和传址方式,传值方式值得改变只在本函数内,传址方式值的改变会影响变量本身,C语言中数组作为函数参数时是传址的,即参数int a[] 就相当于int *a,将数组的首地址传递给了函数

选A啊,实参是数组的首地址,首地址当然没有变,你改变的是这个首地址下的数组内容,不是首地址本身
形参的修改不改变实参本身,这句话在C语言里永远适用,因为形参永远只是实参的副本,C语言里没有引用

这道题选a,函


计算机二级C语言,这道题B C D为什么不是正确的switch语句?(若a和b均...
B 因为switch语句后面有个分号 C 因为switch(a)才可以 D 因为switch(必须是常量表达式)才可以

哪位大神指点一下c语言这道题为什么是2.75不是2.5
看运算符优先级,括号优先级最高,先计算(x+y)。x+y=7+4.7=11.7,然后强制转换成(int)类型,即丢弃小数位,(int)(x+y)=11,带入表达式 x+a%3*11%2\/4,% * \/优先级相同,从左到有计算 a%3=7%3=1,带入,x+1*11%2\/4,即x+11%2\/4 11%2=1,带入x+1\/4,1\/4=0,带...

计算机二级 C语言 这道题怎么做?
这道题答案应该选A include<stdio.h>void fun(int *a, int *b){int *c;c=a;a=b;b=c; } int main(){int x=3,y=5,*p=&x,*q=&y;fun(p,q);printf("%d,%d",*p,*q);fun(&x,&y); printf("%d,%d",*p,*q); return 0; } ...

二级c语言的一道题
答案是D。首先,你要知道a++ 和++a 即两个加号写在前面和后面的不同。写在后面:先运算,再加1;写在前面:先加1,再运算。所以上面的情况是:第一次进while:发现a=-2,b加1后为1,因为while语句里什么也不做,所以进入下一次循环;第二次进while:发现a=-1,b加1后为2,同理,进入下一...

计算机二级c语言最后一道程序设计题要怎么运行呢?
1.选择题:如果C语言有一定基础,考前一周开始刷题没大问题(因为刷早了会忘)。我发的模拟考试软件里有,做完题有讲解。另外背一背公共基础知识和一些程序设计基础,软件设计基础blabla,简单的一定要拿到!其次是数据结构和数据库设计基础,这些如果是零基础确实比较困难。从题库中看,这些题其实也都...

计算机二级C语言最后一道题怎么给分
计算机二级c语言最后一道大题是按照过程给分的,为人工阅卷 1.计算机二级c语言整张卷子为纸上答题,但是整张卷子会扫描到电脑里去。选择题由电脑自动评判,填空和简答扫描到电脑以后由人工批改。2.C语言考试最后一道题目是有一定难度,一般只有百分之30的人能拿满分,建议不会做的话写几个解答步骤,这...

C语言2级 此题需要注释 看不懂
也就是说:static intx=5; 这句语句只在fun()第一次被调用时起作用,后2次被调用时,它被跳过了。i的值___fun调用前x___fun调用后x 0___未知___ 6 1___6___7 2___7___8 理解了吧,再布理解。。我就说说不清了。。。

C语言基础,这道题是什么意思呢?
知道怎么区分这几个运算符了 那么他们之间是有优先级的概念的 这里的优先级是说在一个表达式里出现了不同的运算符哪个运算符先运算的而言的 可以看出所谓赋值运算符,算数运算符,关系运算符,逻辑运算符,位运算符···等、各自代表一类运算符各自有各自的运算对象,有个自的运算结果 以下代码:int a...

计算机二级考试c语言最后一道大题怎么给分的?
计算机二级c语言最后一道大题是按照过程给分,是人工阅卷。C语言程序的结构:包括有:顺序结构、分支结构、循环结构。理解和学习程序的执行过程,对于以后学习其他的编程语言,或者程序的调试,程序调Bug都有很好的帮助。C语言考试最后一道题目是有一定难度,一般只有百分之30的人能拿满分,建议不会做的话...

二级c语言,15题,B为什么是6?
x++,2*x;考的是逗号运算的概念。因为x++的结果为3,2*x就是2*3,所以得6;而逗号运算表达式取得是最后一个表达式的值,所以最终结果为6.

福清市19723819463: c语言.这题为什么选a啊! -
移享克林: 宏展开.#define ADD(x) x*x d=ADD(a+b)*c; 宏展开之后就是:d=a+b*a+b*c; 答案自然是70.要想a+b被当成一个整体,宏定义要加括号#define ADD(x) ((x)*(x)) 展开后就是:d=((a+b)*(a+b))*c;

福清市19723819463: 计算机二级C语言,,为什么选A,sizeof是什么, -
移享克林: sizeof是统计字节数,int为4个字节,double为8个字节.

福清市19723819463: 一道c语言题目,求解答!!!!!!! -
移享克林: scanf()函数中没有精度控制.如: scanf("%5.2f",&a); 是非法的.不能企图用此语句输入小数为2位的实数.则排除c B,D没有%排除

福清市19723819463: c语言有几个不懂得问题 -
移享克林: 你的程序有不少错误,对人工解答或多或少有影响,看看吧,楼上两个就被吓跑了.第一题:#include int main(){ int i,k,n; FILE *fp; fp=fopen("data.dat","w+...

福清市19723819463: 为什么37题选D23题选A?这两个题中f函数和fun函数都是无返回值型的为什么答案做法不同? -
移享克林: 37题是值的传递,实参值不变(值是单向传递的)23题是地址的传递(传的是数组首地址),所以值会变

福清市19723819463: 二级C选择题为什么不对呢 -
移享克林: 1)答案是D.1,2,p++是先按p来执行本行代码,所以输出时*p=a[0],然后p再自加1,这时*p=a[1];2)答案是D.3,函数f的功能是把字符串从小到大排序,所以p[0]是字符串“abc”,长度为3;3)答...

福清市19723819463: C语言问题 -
移享克林: 一、C语言规定总是从main()开始执行的(这个函数也叫“主函数”).因此,你发来的题目中的(1、6、8)叙述都是错误的,都应该选择F.二、第2题中,C语言对其数据在内存中所占用的实际字节数,随着程序中声明的数据类型以及数...

福清市19723819463: 计算机二级C语言,为什么选A, -
移享克林: 这个swap函数只交换了字符串里的第一个字符,后面的没有交换

福清市19723819463: 计算机二级C语言程序的一个题目,不知道答案怎么来的.求解析 -
移享克林: 初值就是你在定义变量的同时就可以给他赋一个初始值 比如 int i=0; 就是定义一个变量,并赋予初值0一般是为了防止程序中误操作导致直接使用未赋值的变量进行计算变量变量,之所以叫变量就是他的值是可以改变的,所以即使有初值也可...

福清市19723819463: C语言编程从键盘上输入a的值,用选择语句if…else求函数f(x)=|a| -
移享克林: #include main() { float a; float x; scanf("%f",&a); if(a>=0) x=a; else x=-a; printf("f(%6.2f)=%6.2f\n",a,x); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网