请教C语言高手一个问题~~

作者&投稿:犁昏 (若有异议请与网页底部的电邮联系)
请教C语言高手一个问题~

abcdef输出为fabcde.

程序加上注释为:
#include
#include

void fun(char* str)
{
char temp;
int n,i;

//取得str的长度
n=strlen(str);

//将最后一个字符赋值给temp;
// 注意数组下标从0 开始,故这里要用n-1
temp = str[n-1];

//循环将数组前一个位置的值赋值到当前位置.
//当i 值减小到0 的时候退出,也就是说str[0]的值还是原来的值,没有变
for(i=n-1; i>0 ;i--)
{
str[i]=str[i-1];
}

//将temp的值赋值到数组的第一个位置,也就是0位
str[0]=temp;
}

main()
{
char s[50];
scanf("%s",s);

fun(s);

printf("%s
",s);

return 0;
}

函数调用fun(s), 是传递char* 过去, 传递的是数组的指针. 指向数组的首地址, 具体值和&s[0]是一样的. 2者还是有区别的, s 在函数传递时表示的是指向数组的指针, 而&s[0]表示的是数组第0个元素的地址, 含义不一致,但是具体值是一致的.

printf("%x
",0xcffffff3>>2);中的0xcffffff3没有赋给变量,编译器把它按其大小解释为无称号数;而int f = 0xcffffff3;中的f是int型,0xcffffff3由于最高位是1,就按负数取补存放了。无论正数负数,右移位时符号位是跟随的,所以造成结果不同。

scanf 函数,要加入地址符号&,scanf 在读取字符串的时候;

会把空格作为结束符,所以就出现了下面的情况:

aa
bb

而scanf 函数结束的时候,会向下传递一个回车符,这个回车符,就被 gets(a3); 接收到了,

所以第三行是空行,没有内容;

第四行显示的 cc dd 其实是 gets(a4) 内的值。



scanf函数遇到空格和回车就结束!所以a1接收的是aa,a2接收的是bb;而gets以回车为结束符,可以接收空格键;所以第一行的回车被a3作为结束符,a4接收的是cc dd ;a3其实是空的!

scanf遇到空格、换行、等字符时,认为输入结束。
gets只有遇到换行时才认为输入结束。

赋值后a1 = "aa", a2 = "bb", a3 = "cc dd", a4 = "\0"(就是那个回车)
最后光标停在第5行

aaaaaaaa啊啊啊啊啊啊啊啊啊

请教大家一个c语言中的问题?这个问题已经困扰我很久了。题目如下:_百 ...
答:首先你要明确这样一个问题。在C语言中,变量是有生命周期和作用域的(链接类型暂时不提)生命周期,指变量对程序可见的范围 作用域,指变量对程序可修改的范围 注意:有生命周期的变量不一定有作用域(也就是说,可以访问的变量不一定全是可修改的)另外你应该知道,C语言函数只能按值传参,而且形参被...

C语言问题,请教高手?
答:C选项语法上是没有错误的,但是逻辑上不对,你看题目,题目说的是正确调用,所以如果你纠结于语法问题肯定要被搞死的。C选项str3是个指针变量,但是刚才特地说了“存储空间”,你能告诉我这个str3指针变量所指的存储空间是哪里吗?不能,因为定义中没有给他赋值。A是正确的,是把HELLO!复制到str1所...

C语言初学,想请教各位大哥一个问题
答:第一,你输入数据时,中间要经逗号分隔,如:3,5,2 第二,你的if语句确实有问题 if(a>b,a>c)max=a; 这时,只要a>c就会max=a 因此应该改正,,改成如下:if( a>b && a>c ) max=a ;else if ( b>a&& b>c ) max=b ;else max=c ;...

各位c语言程序高手,我这有套题需要你们来解答,谢谢啦~!
答:C、函数内可以嵌套定义函数 D、若用数组名作为函数调用的实参,传递给形参的是数组的首地址 20、以下叙述中错误的是( D )A、c语言中对二进制文件的访问速度比文本文件快 B、c语言中,随机文件以二进制代码形式存储数据 C、语句FILE fp;定义了一个名为fp的文件指针 D、c语言中的文本文件...

各位知友,本人新学C语音。碰到一个不复杂的程序问题,对运行结果有疑问...
答:碰到一个不复杂的程序问题,对运行结果有疑问,题目如下,求高手解惑: #include<stdio.h>voidmain(){inta,b,c,d;a=1;b=2;c=(a++)+(a++)+(a++);d=(++b)+(++b)+(++b);printf("c=%d,d=%d\n",c,d);printf("a=%d,b=%d\n",a,b);}本人得出结果:c=3,d=15a=4,b=5v... #include<...

请教C语言的一个题目?
答:如果希望看到正确的结果,你必须用dos时代的C语言编译器“TurboC2.0”来编译运行,而且必须用 Alt+回车 把屏幕转换成全屏模式,这样你就能看到正确的结果了,如我给出的下图。问题二解答:这两个警告是指这里 char a=176,b=219;如果改成这样 char a=(char)176,b=(char)219;就没问题了。之所以...

请教C语言高手一个很奇怪的问题,关于指针与地址的。
答:在c语言里,((char )*(int )0x02000000)= (char )malloc(20);理解为如下:第一步:0x02000000看成一个很大的整数。第二步:接着(int )0x02000000 则变成了一个指向存储着整型数的地址空间的指针,该地址空间的首地址是0x02000000 。第三步:*(int )0x02000000 则是取第二步说的地址空间中的...

C语言问题,请教一下!
答:C语言在编译的时候会为数组分配内存,所以在编译好运行的时候a的地址是确定的了。它后面是一块连续的内存。此时意味着a是一个常量,常量是不能做自增运算的。C选项也是错误的。:p是一个指针变量。变量意味着本身也有一个地址。只是这个地址对这个程序并没有实质用处。所以p本身也是一个地址,但它不...

求教C语言高手一个问题咯
答:void fun(char *a,char *b){ while(*a='*'){ a++;} while(*b=*a){ b++;a++;} } while(*a='*') 是死循环,将 * 赋值给 *a, *a转换为true,一直执行下去,导致数组越界,程序崩溃。应该改为比较操作:while( *a == '*' )。然后第一个while的目的就是找到字符串a中的第一...

请教C语言高手一个问题
答:abcdef<回车>输出为fabcde.程序加上注释为:include <stdio.h> include <string.h> void fun(char* str){ char temp;int n,i;//取得str的长度 n=strlen(str);//将最后一个字符赋值给temp;// 注意数组下标从0 开始,故这里要用n-1 temp = str[n-1];//循环将数组前一个位置的值赋值到...