1、int b; char c[10]; 正确的输入语句:scanf("%d%s",&b,c); 解释:我们最开始应该会想到取值符号,所以会有scanf("%d%s",&b,&c);这种答案。但是要清楚数组名就是该数组的首地址,所以不需要加上取值符号。 2、 #inlcude <stdio.h> int main() { int m,n,p; scanf("m=%dn=%dp=%d",&m,&n,&p); printf("%d%d%d\n",m,n,p); return 0; 从键盘输入数据,格式为:m=11n=22p=33 解析:在平时我们运行程序输入数据时,大多都是11 22 33 这种中间是空格的形式,或者把空格变为换行的形式,就是输入一个数按一下回车。但是都是不规范的,虽然可以实现输入。 3、#inlcude <stdio.h> int main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d %d %d\n",i,j,k); return 0; } 输出的结果是:2 3 3 解析:很多人都会忽略 || 符号。当在执行if语句进行判断的时候,因为i=1,所以i++==1是true,执行完后自加1,i=2;&& 符号意思为前后两者都必须为true才行,而后者中有 || 符号,这两者中只需有一个为true即可,因为j=2,++j==3先自加1,j=3,所以++j==3为true,因为是||符号,前者正确后就不需要判断后者了,所以k的值是不变的。注意:有些环境会从后往前判断 4、关于sizeof和strlen这两个方法: char a[7]="a0\0a0\0"; 用sizeof求其长度:sizeof(a);结果为7; 用strlen求其长度:strlen(a);结果为2,因为这个方法求长度的时候遇到'\0' 停止,不在往后进行。 char a[]="aaa"; 用sizeof求其长度:sizeof(a);结果为4,含有\0的内存空间; 用strlen求其长度:strlen(a);结果为3,不含有\0的内存空间; 5、 #include <stdio.h> void point(char *p) {p+=3;} int main() { char b[4]={’a’,’b’,’c’,’d’}, *p=b; point(p); printf("%c\n",*p); return 0; } 程序运行后的输出结果是( a ) 解析:即便是调用了point函数,并且改变了指针p所指向的地址,但是主体函数中的指针是不会发生改变的,因为传递的参数只是主体函数中指针p的一个拷贝而已,这是两个不同的指针,只是指向了同一个内存地址而已。 6、char* str = "hello,world"; int len = strlen(str); char* dest = (char*)malloc(len+1); 当用strlen方法获取到str的长度并用其为指针dest分配了同样长度的内存空间时,一定要记得len加上 1 ,给出\0 的内存空间。 7、在为一个新的字符串赋值的时候,一定记得在最后要加上 \0 。