错题记录(二)

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\n", myString());
15     return 0;
16 }

这里myString()返回的buffer是函数内的局部变量,它的声明周期随着函数的调用结束而结束,之前我记录过,函数参数、函数内局部变量等都是存放在栈区。所以这里返回的要根据编译器怎么处理有关。

2.枚举类型的定义方法:

enum StudyMethod {

  RECORD,

  LEARNING,

  LISNING,

  DISCUSS

}SM;

3.执行结果是:23

1 int c = 23;
2 print("%d\n",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.

以下程序的输出结果为:9,10
main()
{int i=010,j=10;
printf("%d,%d\n",++i,j--);
}

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\n",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

posted @ 2019-02-27 07:56  leoncumt  阅读(195)  评论(0编辑  收藏  举报