1.如下代码输出是什么:
1 #include<stdio.h> 2 char *myString() 3 { 4 char buffer[6] = {0}; 5 char *s = "Hello World!"; 6 for (int i = 0; i < sizeof(buffer) - 1; i++) 7 { 8 buffer[i] = *(s + i); 9 } 10 return buffer; 11 } 12 int main(int argc, char **argv) 13 { 14 printf("%s ", myString()); 15 return 0; 16 }
这里myString()返回的buffer是函数内的局部变量,它的声明周期随着函数的调用结束而结束,之前我记录过,函数参数、函数内局部变量等都是存放在栈区。所以这里返回的要根据编译器怎么处理有关。
2.枚举类型的定义方法:
enum StudyMethod {
RECORD,
LEARNING,
LISNING,
DISCUSS
}SM;
3.执行结果是:23
1 int c = 23; 2 print("%d ",c&c);
&与运算符,任何数和自己相与的结果都是自己。23的二进制是10111,当前位与其对应位同时为1才为1。若果是或,当前位与其对应位有1就为1。
4,程序执行后,文件中的内容是:hello
1 #include <stdio.h> 2 void fun (char *fname,char *st) 3 { 4 FTLE *myf;int i; 5 myf=fopen (fname,"w"); 6 for (i=0;i<strlen(st);i++) fputc (st[i],myf); 7 fclose (myf); 8 } 9 void main() 10 { 11 fun("test.txt","new world"); 12 fun("test.txt","hello,"); 13 }
这里主要考察fopen()第二个参数的各个用法:w以只写的方式打开文件,如果文件不存在,则自动创建这个文件,每次打开之后,会清除之前文件的内容。再将数据写入。
我记得的参数还有w+(以读写的方式打开文件,其余和w相同)r、r+(以只读的方式打开文件)a、a+(打开文件后,在以有内容的后面写入内容)。
5.
i是八进制数,j是10进制数。规定:八进制数以0开头,十进制数以1~9开头,十六进制数以0X开头。
其中,十六进制中前10位使用0~9表示,后六位使用A~F表示
010转化为10进制方法为:0*8^0 + 1*8^1 + 0*8^2 = 8
6.一下程序的输出结果为:1
1 main() 2 { int 3 a=4,b=5,c=0,d; 4 d=!a&&!b||!c; 5 printf("%d ",d); 6 }
运算符的优先级:!> && > ||
只要是非0的数,取非的结果都是0
先做取非操作:d = 0 && 0 || 1
再做与操作:d = 0 || 1
再做或操作:d = 1
7.下面程序输出的是:hallo
1 void f(char * x) 2 { 3 x++; 4 *x='a'; 5 } 6 int main() 7 { 8 char str [sizeof("hello")]; 9 strcpy(str, "hello"); 10 f(str); 11 cout<<str; 12 return 0; 13 }
值传递:传进去的参数会被函数拷贝一份,函数内对参数做出的改变将不会影响函数外的值。
这里str是一个指针,指向数组的第一个元素的地址,在f()中传进去的是指向数组的指针,它仅仅改变了hello的第二个字符,所以输出是hallo