#include <stdio.h>
#define N 81
void fun(char *s)
{
char c=*s;
for(;*(s+1);s++)
*s=*(s+1);
*s=c;
*(s+1)='\0';
}
void main()
{
char a[N];
gets(a);
fun(a);
puts(a);
}
这是一道期末考试题目,主要的作用是将输入的字符串第一个字符取出来放到这串字符的末尾,我主要的疑问是这一句话char c=*s;
,为什么字符变量C存储的是字符数组a中的第一个字符,而不是最后一个字符?我有这个疑问是因为在<C陷阱与缺陷>P12页中提到:有些C编译器允许在一个字符常量(以及字符串常量)中包含多个字符,二最后这个字符变量的值按照特定编译器实现中定义的方式组合得到。在Visual C++和Gcc v2.95中采取的做法是,依次用后一个字符覆盖前一个字符,最后得到的整数值即最后一个字符的整数值。我用Dev C++运行。
你理解错书的内容了,书里其实指的是一种奇技淫巧,多字节字符字面量:
32位的int可以放下4个字节ASCII。
C语言里数组名可以当做一个指针常量,s[i]就是*(s+i)。*s就是取的数组地址的一个字符。