c总结

1、如何在linux上同时编译两个源文件?
答、gcc -o aa a1.c a2.c;
2、如何在结构体中定义只有几个bit大小的对象?
答、struct A
{
unsigned char a:1;
char b:4;
};
3、为一个变量赋值二进制数据,如何进行?如何打印?
答、(加前缀0b)例如int a=0b1101
打印可以使用0x,即十六进制方式打印。
4、Qt上使用io函数默认的文件的位置在哪?
答、调试目录(调试过后形成的新路径)。非源代码目录。
5、为什么FILE *p=fopen("data.cfg","r");可以不写D:\\,或C:\\?
答:这种写法是相对路径读取文件写法,在qtIDE中,如果这样写,必须要求,data.cfg在调试目录下(文件名含有bug或release的目录)。
6、FILE *p=fopen("data.cfg","r"),接下来可以直接读文件吗?
答、不行,必须判断p是否是NULL,如果是则printf("file not found\n");比较正规的写法是
if(p==NULL)
{
fprintf(stderr,"can't open test.txt");
return 1;
}
7、unsigned声明书写时要注意什么?
答、不要写成unsinged;
8、说出下面的结构体内存空间分布特征?
struct C
{
char a1:4;
int a2:10;
};
答:按照结构体内存对齐规则惯例,首先指定最长数据类型int,会分配4字节内存空间,然后按照确切的大小,例如4bit、10bit进行填充。不足4字节按4字节存储。(需测试)。
9、fgets()、fputs()和fscanf()、fprintf()相比后两个最大的特点是什么?
答、后两个是用格式化形式从文件中输出到某些变量,或以格式化形式将变量中的数据输入到文件中。
10、为什么不能用fgets、fputs、fprintf、fscanf读取二进制文件?
答:因为二进制文件会存在-1;按字节读取,造成函数提前结束。???
而且二进制文件中可能出现\r\n,而以上函数会默认去掉\r再将数据读到内存,所以不能将二进制文件有效读入。
11、fopen函数第二个参数如果是w,写文件会有什么特点?
答、会覆盖原有文件内容。截断?
12、fopen函数第二个参数如果是a,写文件会有什么特点?
答、若文件不存在,会新建一个新文件,如果文件存在,会向文件中追加数据。而且是向最后一个有效字符后面追加。
13、windows所有的文本文件在磁盘上存储的行结尾方式是什么?与linux有什么区别?
答、\r\n;而linux没有\r;
14、fopen函数中第二参数"r"和"rb"的区别是什么?
答、“r”会使得文件流中行结尾\r\n中\r被清除,只留下\n。而rb参数不会这样做。windows中才会有这种情况。
15、fopen函数中第二个参数“w”和“wb”的区别是什么?
答、“w”会使得写入文件到磁盘上换行时自动加\r;而"wb"则不会。例如char *a=“hello\nworld”,不加b,会使得写入文件时在\n前加\r;
加b,不会造成这种事发生。因此再次打开文件时,前者显示
hello
world
后者显示helloworld。切记\n在windows上不是换行。(验证)
16、secureCRT如何正确将服务器文件转到windows或windows转到服务器?
答、从服务器传到windows,可以用ASCII模式;从windows传到服务器,可以用binary模式。(这里的服务器是指Ubuntu)。
17、r+参数的作用是什么?
答、可读可写的方式打开文件,但是文件必须存在。
18、windows上如何查看文件内容?
答、type 1.txt;
19、如何查看windows的命令行命令?
答、help命令。
20、如何设置windows控制台的颜色?
答、示例:color ab。
21、如何创建大文件?
答、通过fseek()函数。但是必须在结尾写入一个字节。且文件一定要关闭。
22、程序中是否适合写多个if,不用else?
答、不可以,因为可能会造成出错。
23、为什么向文件追加信息会不换行?
答、(待验证)。
24、为什么判断一年是不是闰年的方法是若能被100整除则必须能被400整除,或者能被4整除但不能被100整除。
答、(待验证)。注意从非整百年和整百年两个方面考虑。
25、标识符以p开头一般表示什么?
答、指针标识符。
26、1是不是质数?
答、不是。
27、质数的规律是什么?
答、满足6n+(-)1,必须在个范围内。
28、fscanf()和scanf()及sscanf()函数返回值的特点是什么?
答、成功读取的数据的个数。
29、stderr的含义?
答、一般输出到屏幕。例如fprintf(stderr,"data forming error\n");
30、stderr在实际应用中的特点?
答、stderr可以将要打印的数据打印到屏幕,并且没有缓冲区。?
40、同一变量涉及到多次从其它文件或流中输出,要注意什么?特别是设置空间作为缓冲区。
答、每次操作前清空。
41、如果循环检测到feof(p)表达式的值为1,那么流指针指向哪?不关闭文件流,或不重置指针,能继续写入吗?
答、不是在文件有效读写范围内。不能。
42、如果文件函数例如fscanf()等等,没有将有效数据输入到特定位置,那么会发生什么问题?
答、文件指针中的文件读写指针不能移动。在循环结构中,可能造成死循环。
43、与atoi函数类似的函数有哪些?
答、atof、atod等。
44、feof(p)为1时,p指向哪里?
答、指向最后一行的最后一个字符的后面,如果这个字符不是\n,追加文件时,就要自己加上。避免追加数据时,没有换行。
例如fputs("\nabc",p);
45、在使用fscanf()函数时,因为是指定格式从文件流中扫值进入变量,为了防止出现以%s格式输入时,将后面%d格式输入的数据也扫入,采取什么方式?
答、fscanf()的特殊用法,如fscanf(fp, "name=%[^,],high=%d,weight=%d\n", name, &high, &weight);
46、单词:validate?scanset?negated scanset?asterisk?
47、一个数据文件例如a.txt在磁盘上分布可能不是连续的,可能不是规律的。
48、文本文件有什么特点?
答、文本文件上都是ASCII码。这意味着文本文件的解读方式是ASCII方式(一个字节一个字节解读),而且对应磁盘上的字节种类是有规律的,是可数的。
49、截断的含义是什么?
答、使文件长度变为零,这是用fopen函数时,使用“w”方式或"w+"方式打开文件时发生。
50、如果只用“w”,能不能用fopen函数读文件?
答、最好不要,因为w表示只写,如果文件不存在,就创建,如果文件存在,就会截断(即文件长度变为零,不仅仅是将文件数据清空)。
51、关闭文件的时候,还会发生什么?
答、刷新缓冲区。即使缓冲区中数据排空。
52、文件不关闭,进程退出了,考虑到缓冲区问题,可能造成什么影响?
答、缓冲区中有数据,再次读写文件会发生数据紊乱。
53、单词、macros:宏
54、fseek(p,0,SEEK_SET)真的是将指针p放到SEEK_SET上吗?
答、没有关系,只是将p所指向的结构体内的位置记录进行设置。
55、man 3 sleep会发生设么?
答、查看c语言中sleep函数的头文件;
56、unix中如何将sleep(1)变为毫秒?默认是1秒。
答、采用usleep(1);
57、在linux上用字符显示输出缓存区的大小?
58、EOF含义是什么?
答、用fgetc读取文件字符时,如果读到文件末尾,函数返回EOF,代表不能再读取字符。这是一个大于1个字节表示的数。
59、块读写方式一般只适用于什么文件?
答、二进制文件。
60、fread函数返回零表示什么?可以如何利用?
答、表示文件读取完成,文件指针已经到结尾了,文件某尾标志已经触发,feof检查结果返回1,可以作为循环判断条件。
61、fread(&str,size,num,p);读完后要做怎样的处理?
答、将str指向的缓冲区用memset置成空。
62、用feof函数判断文件是否到达结束位置时,什么时候文件结束标志会被设置?
答、当要读文件中最后字符的下一个位置的数据时,才会被触发。即使已经移动到这个位置,如果不读取,是不会设置文件结束标志的。因此可能造成再循环一次。
63、为什么迅雷下载的文件,还没下完,文件就显示有几个g大小?难道是假文件吗?
答、不是假文件,确实是这么大,只是里面的bit位还没正确被写好,都是空数据。这是为了方便管理下载的文件。
64、如果让循环体内的语句一句也不执行,可以采取什么方式?
答、可以在循环条件中设置退出表达式,而不是在循环体内部再采用。
65、如果让循环体内的语句只执行适当几行,可以采取什么方式?
答、在要执行的语句后,设置退出条件判断,并根据此执行break,退出循环。
66、linux中编译能通过,但是运行时出现"段错误(核心已转储)"是什么原因?
答、访问到了越界的空间,例如访问数组的最后元素的下一个元素。free(p),p内存储的是一个不合法的地址
67、linux上运行程序时,出现glibc detected是什么原因造成的?
答、
68、stray?
答、使用了中文字符),等。
69、记事本中编写c语言源代码,如果发生错误,要考虑哪些细节错误?
答、不要在英文括号的地方用中文括号,如果犯了这种错误,会发生编译器提醒,要添加括号。
70、UTF-8编码有哪两种分类?
答、带BOM和不带BOM;例如888我爱中国,在带BOM条件下,开始字节并不是888三个字符对应的ASCII。
71、记事本GBK编码的文件转成UTF-8的文件,有什么意外情况?
答、可能将其变成带BOM的文本文件。造成文件开头多余三个字节。(UTF8编码带BOM和不带BOM
BOM——Byte Order Mark,就是字节序标记
所以如果文件带BOM的话  首行的前三个字节的二进制的整数值就是 -17、-69、-65
EF BB BF)。
72、对指针而言,sizeof用法的本质是什么?每次都能得到最开始分配的字符串空间的大小吗?
答、求指针变量本身所占的内存空间大小,即类型的大小。如果是数组,可以正确访问到数组的元素所占的总的存储空间。
73、当需要将文本文件的字符读入到内存时,为了避免每行前后空格字符的干扰,可以采取如何措施?
答、先删除空格字符,再读入内存。
74、函数如果未定义,编译能通过,但是不能运行成功,出现断言问题,怎么办?错误提示:debug assertion failed。
答、库中没有函数,要自己创建。
75、编写与文件处理相关的程序时,要注意什么?
答、先知道文件的结构。
76、编程时如何避免变量定义过多造成程序运行时内存过大?
答、将变量定义到函数中去。
77、字符串如果被处理后,中间某个字符变为‘\0’,free内存时能成功吗?
答、可以。之前申请多少,之后就释放多少?free功能是从变量内存储的地址开始,释放掉所有已申请但还未释放的内存。
78、用memcpy时,如何避免拷贝到多余的信息(不是自己要的)?
答、指定更确切的数目。
79、realloc和malloc以及calloc申请内存空间是连续的吗?这意味着什么?
答、是连续的,这意味着可以通过首地址访问到所有空间的数据。
80、shift+tab键在QT、和VS编程时的作用是什么?
答、选中程序段,然后按这些键每按一下tab键,所选中的段就会往回缩。
81、fgets(buf,10,p);如果文件中一行超过10个字符,第二次再调用fgets,会怎样读?
答、接着读上一行未读的数据。
82、fgets在文件发生读错误时也会返回空(指针),所以能用fgets返回结果判断文件是否读结束吗?
答、不能,必须结合feof进行判断。
83、scanf("pleas input a:%d",&a);怎样才能正确输入?
答、pleas input a:相当于匹配条件,必须在控制台输入这个匹配条件后才能成功接收。
84、qt中debug和releas模式的区别
答、debug用于调试,已经加入了很多断点信息,而且运行比release模式慢,生成的文件比release生成的模式要大很多。
release模式的适用于简单的小程序,没有很强的保密性,而debug模式会添加反汇编程序,防外挂等。
85、能在界面程序中添加printf等标准输入输出程序吗?
答、不能。
(86、眨眼睛能保护好眼睛吗?答:能)
87、F5、F10、F11的功能是什么(vs和qt)?F11的功能是什么?
答、F10执行完这一行代码(如果是函数调用),得到结果,并且停住,等待下一步操作;
F11会进入函数调用,并且停住,不会得出函数调用的结果,等待下一步操作。
F5调试运行,到断点处停住,等待下一步操作。
88、编译时加上-g会进入什么模式?
答、debug模式,调试模式。例如gcc helloc.c -g,会生成a.out文件,再使用命令gdb ./a.out
89、GDB本质是什么?如何终止gdb的运行模式,但是不退出gdb?
答、unix或linux项目调试器。start命令
90、怎样让scanf()调用后的缓冲区清空。以免影响下次使用scanf,造成数据错误。
答、???多次使用getchar();
91、如何知道scanf的输入是否是对的?
答、可以通过scanf的返回值进行判断,因为如果scanf能够成功,则返回1,反之是0;因此必须要一个一个输。
然后用fgets或getchar将缓冲区中未成功读取的数据读入。否则缓冲区中的数据会影响下一次使用scanf时的执行结果。
92、为什么tar文件打包两个较小文件被打包后的打包文件大小都是10240?
答、因为tar文件首先申请一个固定大小的空间创建tar文件,在将文件写进,超过10240大小后又会再申请这个固定大小的空间。
93、tar文件是什么,结构是怎样的?
答、tar文件是存放在磁盘上的,是512字节(一个扇区大小)的整数倍,包含两个部分数据,第一个tar header头文件,文件数据;
打包到tar中的文件,满足每个文件都有一个tar header。且预备一个多余的tar header为下次打包做好预备。
94、打开文件时,在什么情况下需要加上文件指针判空判断,file *fp1=fopen(“ a.txt”,"r+")像if(fp1==NULL)return 0。?
答、在文件a.txt已存在时,之前已经被创建。如果第一次写文件就不能再写这样的判断。这是逻辑错误,因为第一次创建的文件肯定不存在,
这样就会造成写文件时,不能正常写进文件。在Linux上出现了“段错误(核心已转存)”。r+要求文件必须存在。???
95、如果打开某文件后,又去执行其它操作,要不要使用fseek将文件游标重新定位到某个合适位置?
答、要,因为这个期间可能发生某些操作造成文件游标偏转。
96、是不是所有tar文件结构体头都是512字节?
答、不是。
97、malloc函数的特点?
答、可以从内存中分配任意一个指定空间大小的内存给用户使用,且之后可以修改内存空间大小,比数组要方便,因为数组的存储空间必须固定。
98、tar文件末尾必须有一个空的tar_header?
答、是
99、能不能将八进制数和十进制数直接比较,其它进制之间呢?答,不能,所以不能将八进制和0比较,0默认是十进制数。
100、怎样在gdb里为main函数传递参数?
答、可以使用命令set args *** ***.
101、c命令在gdb里表示什么含义?
答、程序运行到断点处。
102、vim中contrl o。?contrl w?
答、
103、如果申请的内存空间,被释放了,再对这个内存空间进行数据操作(输出,输入等),在linux上会出现什么情况?
答、段错误(核心已转储)。
104、-lm什么时候使用?
答、在Linux上如果使用了头文件像stdlib.h或math.h),编译时要加上这个后缀。
105、rm *?会产生什么效果?如何删除目录?
答、会将目录中所有文件删除掉。删除目录用rmdir。
106、一个汉字并不是一个字节,所以在定义变量数组存储汉字时要特别注意什么?
答、申请的空间要足够大。
107、fseek函数创建新文件是空文件吗?
答、是,且不是乱码。视文件结构而定,也可能创建不了文件。除非在最后添加一位有效的字符。一般是0。
108、stat函数获得文件的权限等信息,能在windows上运行吗?
答、不能,但是可以在qt上运行,如果windows上有qt则可以运行。这个函数是在linux上执行的,stat函数是为了查文件的信息。

109、fopen(“a.dat”,"a");执行后ftell(p)的值是什么?
答、零,意味着打开文件后文件游标不会立即指向文件末尾。但是可以自己设置。
110、fseek(p,0,SEEK_END);执行后文件游标指向什么地方?
答、文件最后一个不能读的位置,一般为文件信息的最后一位。
111、char *str=(char *)malloc(1000);memset(str,0,1000);str[0]='c';如果将str写进文件,文件会变成1000大小吗?
答、不会,字符串最后的‘\0’字符的值不会被写入到文件。但是中间出现的‘\0’字符可以。
112、如果将文件游标向后移动100个字节,设为新位置,再调用fread函数读时,是从这个新位置开始读入吗?
答、不是,而是从文件末尾。???不同的读写方式,结果不一样。
113、const char *ptr或更高维指针,与const char tr有什么区别?变量的存储空间和变量标识符有什么关系?
答、前者变量的存储空间可以改变,后者变量空间不能改变。即const修饰的并不是ptr,而是char *。
114、‘\0’表示什么?
答、1个字节但所有位上都是0;0的ascii值不是0。字符在内存中的存储方式是ascii。
115、文件复位的功能是什么?
答、
116、fread(buf,1,sizeof(struct student),fp);第二个参数表示什么,如果第二个参数和第三个参数互换,会发生什么?
答、表示读的一个单元的字节数,如果互换,当从文件中最后次读的时候可能字节数小于结构体的大小,这样会造成fread返回值等于零(返回的值是读出的单元的个数),
当作为循环体条件时,会中断循环。
117、rewind函数作用是什么?适用于什么情况?
答、消除文件的末尾或错误标志,并将文件游标指向文件开始,适用于在一个文件流中进行读写切换。
118、gcc -O3 a a.c?
答、用优化的方式编译a.c,生成编译文件。例如去掉不用的变量,例如算出表达式的值。
119、动态库如何分类?有何特点。
答、.so(linux)和.dll是动态链接库,存放在磁盘上,可以被共享。静态链接库是程序私自拥有。
120、gizp能压缩几个文件?
答、一个。所以要用tar命令将文件打包成一个文件。
121、int ******pppppp的本质是什么?
答、能够被解引用6次,并将第六次解引用的值强转成整型,即使它的本意是个地址。
122、递归的特点是什么?
答、递归的本质是同一功能执行多次,且每次执行可以影响相邻的两次的执行情况
123、递归结束条件的作用?
答、可以终止最底层递归,使得递归得以运行。
124、printf("%e",a);表示什么?
答、按科学计数法形式输出。
125、系统调用和API有区别吗?
答、系统调用不一定是API,API是在应用层封装了系统调用。
126、访管指令的作用,及运行过程?
答、访管指令作用是使用户态进入内核态,运行过程是在用户态触发,在内核态态运行。?是否可以通过访管指令操作甚至控制内核?
127、递归都可以改写成循环吗?
答、不都可以。
128、 char str[]="abcdefgde";
    char sub[]="de";
    char rep[]="DE";
    str=streplace(str,sub,rep);
    printf("%s\n",str);
    //printf("Hello World!\n");
    return 0;
这段代码有什么错误?
答、str是数组名,相当于常量,不能改变
129、#include <stdio.h>
char *streplace(char *str,const char *sub,const char *rep)
{
    if((str==NULL)||(sub==NULL)||(rep==NULL))
        return NULL;
    int i=0;//遍历原字符串
    int j=0;//替换
    int length=0;//获得原字符串长度,包括零字符
    while(str[i])
    {
     i++;
    }
    length=i+1;
    //找到sub在str中的位置
   for(i=0;i<length;i++)
   {
       if((str[i]!=sub[j])&&(sub[j]!=0))
           j=0;
      else if((str[i]==sub[j])&&(str[j]!=0))//@ 
       {
           j++;
       }else if(sub[j]==0)
       {
           //进行替换
           i=i-j;
           j=0;
           while(rep[j]!=0)
           {
               str[i]=rep[j];
               i++;
               j++;
           }
           j=0;i=i-1;
       }


   }
   printf("----");
    return str;
}
int main(void)
{
    char str[]="abcdefgde";
    char sub[]="de";
    char rep[]="DE";
    streplace(str,sub,rep);
    printf("%s\n",str);
    //printf("Hello World!\n");
    return 0;
}


这段代码犯了什么错误?
答、@处str[j]!=0错误,应该改为sub[j]!=0;注意上下文。都是sub[j]的判断。
130、int main()
{
void *p=0x8000;
void *q=0x9000;
printf("%d",(int *)q-(int *)p);
return 0;
}
输出结果是什么?为什么?
答、输出结果是1024,因为强制类型转换会改变地址所指向的内存空间的结构,即4个字节表示一个整型。
131、feibonaqie.c:3:1: error: stray '\243' in program
 void main()
 ^
feibonaqie.c:3:1: error: stray '\251' in program
feibonaqie.c:4:1: error: expected declaration specifiers or '...' before '{' token
什么原因造成的?
答、main后的括号采用的是中文括号字符。
132、feibonaqie.c: In function 'main':
feibonaqie.c:15:2: error: 'else' without a previous 'if'
  else if(i==1)
什么原因?
答、if(i==0);;不要加分号。
133、please input your number:
4
0,,,,,0,0,0,0,
什么原因?
答、for(i=0;i<n;i++);不要加分号。且数组要记得用memset置零值。
134、feibonaqie.c: In function 'main':
feibonaqie.c:11:2: warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]
  memset(a,0,n*sizeof(int));
什么原因?
答、memset函数的头文件是string.h
135、c语言中模%有什么特点?
答、结果只能是整数。而且只能是整型进行模运算,例如9.8%2;会报错。
136、python一大应用领域是什么?
答、数据安全、数据分析、网站渗透测试(测是否能入侵后台服务器)
137、printf("%8.2f",a);输出格式是怎样的?
答、输出占8个位,其中小数点一个,小数点后两个。
138、C语言中有布尔类型吗?
答、没有,c++中有。
139、浮点数的特点?
答、所储的数与被表示的数是有误差的,即使3.4用浮点数表示,也会与3.4有误差。


141、有没有专门处理字符串的语言?
答、per语言?
142、
unpack.c:34:2: 错误: 程序中有游离的‘\357’
unpack.c:34:2: 错误: 程序中有游离的‘\274’
unpack.c:34:2: 错误: 程序中有游离的‘\233’
linux上出现这种情况的原因?
答、英文分号写成了中文分号。
143、num_read>512?512:need_size?
答、未赋值。?:表达式必须要用左值来接,如果没有,应该在条件中指定。
144、sscanf(phead->size,"%o",&length);表示的含义是?
答、将字符串phead->size(数据来源)按8进制方式转换成10进制,并将结果存放在length中。
145、在virtualware平台下将unbantu设置成与自己主机联网,有什么好处?
答、可以不必插网线,也能将虚拟机和主机相连。
146、函数的定义中要用到文件指针fp、p等,但是该指针的定义在主函数里,或其它函数里,那么要怎样避免重新在函数中打开文件指针?
答、可以采用宏函数定义。???
147、函数中可以定义文件指针作为参数吗?
答、可以。
148、FILE *p=fopen("a.bat","ab"),这种方式写文件时,用fseek有作用吗?如何解决?
答、fseek改变p,再进行写入是没有作用的,强制使用追加的方式写文件,即从不为零的字符
开始写入。可以改为w写方式,但是会创建新文件,或使原有文件截断,并用函数传递p指针。
149、可以通过函数参数传递文件指针吗?
答、可以。
150、为什么c语言的头文件要使用预处理宏防止重复包含?
答、①防止多次包含一个头文件;②如果头文件中有结构体定义 变量定义 函数定义,会发生重定义错误;③头文件会包含其它头文件的说明。也要解决重复问题;④、c语言全局变量默认是
extern的。
151、如何确保每次将特定的信息写到文件的特定行?例如:文件格式是
鱼香肉丝:3份
烧肉快:3份
红烧鱼:5份
答、可以假定每行是20个字节。在扫入信息时用fseek函数改变文件读写位置。
152、c语言的main含义是什么?
答、是程序代码的入口地址。
153、vi中如何交换两行?
答、
154、ip地址能不能作为主机?
答、可以
155、char *p=NULL;strcpy(p,"helloworld")的本质是什么?
答、strcpy本质是将源字符串的数据考到目的指针所指向的"数组"内存空间。因此目的指针指向的"数组"空间大小必须不能比源字符串小。
156、strcat会在末尾追加\0字符吗?
答、会
157、int a=-7;
unsigned int b=5;
if(a+b>10) printf("x");
这个程序运行结果是什么?说明什么问题?如果改为unsigned short int b=5,又会怎样?再如果改为unsigned long int b=5,又会怎样?
答、运行结果是x;说明unsigned int 和 int 变量之间的隐式转换过程是,int 变量类型转为unsigned int ;如果改为unsigned short int,
会出现unsigned short int 向int变量转换,是相反的,没有输出结果,且会向short int转换。如果再改为unsigned long int,会出现int 
向unsigned long int转换。结果是x ,且与int类似,会出现unsigned long 向long转。
158、char a=-7;
unsigned char b=5;
if(a+b>0) printf("xxx");
else pritnf("yyy");
这个程序运行结果是什么?说明什么问题?
答、这个程序运行结构是yyy,说明char型变量和unsigned char 型变量之间的隐式转换过程是,unsigned char型变量向char 型变量转换。
159、unsigned只能修饰什么类型?不能修饰什么类型?
答、只能修饰char、int类型,不能修饰double、float
160、long型变量在linux和windows上占的字节数各是多少?
答、都是4个。
161、long long int变量在linux上占多少字节数?在windows上占多少字节?
答、都是8个。
162、有没有long long double型数据类型?long double型数据类型在linux和windows上各占多少字节?
答、没有long long double类型,但是有long long int 类型。long doulbe它们都是12字节。
163、有没有long float类型的数据?float 类型数据在linux和windows上占多少字节?
答、没有。都是占四个字节。
164、long long型数据有几种?
答、一种,long long int;
165、long型数据有几种?
答、二种,long int 和long double
166、unsigned char型变量和int型变量是如何进行隐式转化的?
答、unsigned char 会转换成unsigned int。???
167、#define max_cb 500.需不需要在后面加上分号;如果是typedef呢?
答、前者可加可不加,后者必须要加。
168、定义变量的同时要做什么?
答、初始化。
169、int *p=0x8000;int *q=0x9000;
printf("%d",q-p);
问输出什么?
答、输出1024;因为0x是16进制,实际上的地址应该转化成10进制。
170、为什么在root用户下配置.vimrc,再切换到lzx用户,发现vimrc中设置的tabstop,及nu命令无效?
答、一个用户设置的vimrc文件只能对该用户有效。
171、linux中如何删除目录?
答、rmdir 文件名
172、D:\qt_code\lianxiti31\lianxiti31.c:65: error: conflicting types for 'readFile'
 int readFile(int n,int **p1)
什么原因?
答、函数形参类型在声明和定义中不一样。
173、D:\qt_code\lianxiti31\lianxiti31.c:75: warning: format '%d' expects argument of type 'int', but argument 3 has type 'int *' [-Wformat=]
     while(fprintf(pfile,"%d",*p1+i)!=0)
什么原因?
答、fprintf,第三个参数应该是一个整型变量,而不是表示其地址。
174、D:\qt_code\lianxiti31\lianxiti31.c:32: error: conflicting types for 'writeFile'
 int writeFile(int n,int *p)
什么原因?
答、函数声明和原形中形参不一样。
178、fputs(buf,pfile);会不会将buf字符串的结尾'\0’写入pfile?会自动写入一个换行符吗?
答、不会,不会。
179、5.若N为整型变量,则for(N=10;N=1;N--);循环里的循环体被(  )。
A) 无限循环       B) 执行10次    C) 执行一次       D) 一次也不执行
答、A,因为N=1是赋值号而不是等号。
180、若有定义: int a=8, b= 5, c; 执行语句c=a/b+0.4 后 c的值为(B)
A) 1.4   B)1     C) 2.0    D)2 
答、因为c是int型,不是浮点型,所以A、C不对。
181、int printSpace(int *p,int n)
{
    if((p==NULL)||(n=0))
        return 0;
    int i=0;
    for(i=0;i<n;i++)
    {
        printf("%d ",*(p+i));
        if((i%8==0)&&(i!=0))
        printf("\n");
    }
    return 0;
}
有什么问题?
答、if((p==NULL)||(n=0));其中n=0是赋值号,应该改为等号。for语句执行不了。
182、有下列程序_______________________.
#include<stdio.h>
int func(int x)
{
int y=0;
  static z=3;
  x=z++,y++;
return (x);
}
void main()
{
int a=2,i,b=0;
for(i=0;i<2;i++)
    b+=func(a++);  
printf(“%d\n”,b);
}
执行后输出的结果是(  D   )。
 (A)3            (B)5            (C)6              (D)7
 答、等号的优先级比逗号高,逗号优先级最低。
183、int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4]=a;
printf("%d",*a);
printf("%d",*p);
输出什么?
答、*a输出大的地址值,*p输出1;严格意义上数组a是数组首元素的地址,所以通过二维指针是不能遍历一个二维数组,可以借助数组指针。
184、 for(i=0;i<n;i++)
    {
        sprintf(buf,"%-2d      ",p[i]);
        fputs(buf,pfile);
        memset(buf,0,1024);
        if(((i+1)%8==0)&&(i!=0))
        fputs("\n",pfile);
    }
如果n是150,输出结果是
150
42      18      35      101      120      125      79      109      
113      15      6       96      32      28      62      42      
146      93      28      37      142      55      3       4       
143      83      22      117      69      96      48      127      
72      139      70      113      18      50      86      145      
54      112      123      34      124      15      142      62      
54      119      48      45      113      58      88      110      
24      142      80      29      17      36      141      43      
139      107      41      93      65      149      147      106      
141      130      71      51      7       52      94      99      
130      24      85      5       7       141      17      27      
132      59      145      40      27      74      138      89      
69      133      130      42      34      66      140      109      
55      31      28      57      24      37      72      96      
75      23      121      130      78      124      148      13      
137      91      12      37      6       18      106      125      
132      53      51      101      142      125      17      131      
58      42      8       88      8       138      4       34      
96      60      110      9       72      139      
如何修改?使得n=150,能够使输出到文件中的数据整洁排放?
答、
"%-2d    "本来含义是元素左对齐,并占二个空间,但是150会出现三个占位,所以并不能起作用。
可以改成"%-3d   ";
150
42       18       35       101      120      125      79       109      
113      15       6        96       32       28       62       42       
146      93       28       37       142      55       3        4        
143      83       22       117      69       96       48       127      
72       139      70       113      18       50       86       145      
54       112      123      34       124      15       142      62       
54       119      48       45       113      58       88       110      
24       142      80       29       17       36       141      43       
139      107      41       93       65       149      147      106      
141      130      71       51       7        52       94       99       
130      24       85       5        7        141      17       27       
132      59       145      40       27       74       138      89       
69       133      130      42       34       66       140      109      
55       31       28       57       24       37       72       96       
75       23       121      130      78       124      148      13       
137      91       12       37       6        18       106      125      
132      53       51       101      142      125      17       131      
58       42       8        88       8        138      4        34       
96       60       110      9        72     
185、给出遍历二维数组数据的方式?
答、// int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
void printArr(int (*ptr)[4])//printArr(arr);
{
    for(int i=0;i<3;++i)
    {
        for(int j=0;j<4;++j)
            printf("%d ",ptr[i][j]);
    }
}
186、 for(i=0;i<n;i++)
    {
        sprintf(buf,"%d",p[i]);
        fputs(buf,pfile);
        memset(buf,0,1024);
        //for循环将空格输入到buf
        for( k=0;k<(number-Uni_value(p[i])+3);k++)
        {
            buf[k]=" ";
        }
        fputs(buf,pfile);
        memset(buf,0,1024);
        if(((i+1)%8==0)&&(i!=0))
        fputs("\n",pfile);
      }
已知、buf是字符数组的地址,这段代码有什么问题?
答、buf[k]是字符,不是字符串,而" "表示字符串。
187、将一串随机形成的字符串中的大写字母按照原来的顺序放置到字符串后半部分
小写字母置于字符串前半部分。
形如 AbCdefGHijLKdfkjf 
ACGHLKbdefijdfkjf
函数原型如下 int TransString(const char *pstr,char len);
实现上述函数对字符串进行转换  要求额外空间尽量少。
简述实现思想?
答、采用类似冒泡排序的方式,如果a[i]是大写字母,a[i+1]是小写字母,就将两个字符交换,否则维持现状。这样一轮循环以后就可以将部分大写字母移到最右边,
部分小写字母移到最左边。为了让所有的大写字母和小写字母都能达到这个效果,可以再进行一次循环。
188、fwrite和fread能不能对文本文件即.txt文件操作?
答、可以。
189、void *p能不能进行解引用操作?
答、不能。*p操作是不允许的。
190、unsigned char *str="abc";和signed char *str="bcd";写法会不会报错?
unsigned char src[]="abc"会不会报错?
答、会。因为"abc","bcd"是常量,unsigned和signed都不能加,但是可以加const.体现了赋值号左右两边的数据必须要有相同的类型。
但是unsigned char src不会,因为是类型拷贝。
191、char a[]="bcde";char *p="bcde",简述&a的值和&(a[0])的值,以及&p的值和&(p[0])的值特征?
答、&a表示的是数组的地址,类型char [5],它的值和&(a[0])的值是相同的。&p的值是变量p的地址,而p是一个指针变量,它的存储空间存储了常量"bcde"的地址。
因此&p和&(p[0])的值是不一样的。&(p[0])的值是对指针变量p的地址进行解引用后访问到的元素的地址。实际上就是p的值。
192、(double)(5/2)值是什么?
答、2.00000000,体现了"从右到左"的思想。
193、int arr[10]={1,2,3};其中arr的类型是什么?
答、int [10]
194、"abce"这种类型被称为什么?
答、字符串常量。
195、int a[2][3]={0}中a表示什么?
答、①它的类型是int [2][3],但是它的值第0行的首地址。②而这个地址的类型是第零行所有元素,所以对a进行*a操作实际上拿到的是第零行的地址。
而**a实际上访问的是第零行第零个元素的地址。解引用操作会暴露标识符存储的数据的类型,并使得表达式有这种类型的特征。
196、应该从哪两个方面分析变量?
答、①、不考虑变量的内存空间,思考标识符本身代表的数据类型。②、考虑内存空间,思考内存空间所存数据的数据类型。
197、sizeof(void)的值是什么?
答、1个字节。
198、int a[10];a+1,地址偏移了多少?如果&a+1呢?而sizeof(a)呢?
答、取决于a存储的地址的类型,因为a存储的地址是int型,因此a+1,实际上偏移了4个字节,这是数组变量的特点决定的。
体现了数组变量和普通变量不是同种类型的变量。即一个int型。&a+1偏移了40个字节,sizeof(a)大小是40。
199、strlen和sizeof的返回类型是什么?
答、unsigned int。
200、怎样为文件创建新的可视窗口?
答、用鼠标选中目录,在单击右键,选择在新的窗口打开。
210、哪些字符像特殊的图像?
答、
211、如何从逻辑上删除一段c语言程序?注释的部分程序会不会被删除?
答、#if 0
statments
    #endif
注释的部分程序不会被删除。
212、数组名作为函数形参,它的效果是怎样的?
答、产生按引用传递的效果。???
213、NUL字符是什么?
答、相当于'\0'。使用时必须预定义。
214、EOF有ASCII值吗?
答、
212、用scanf函数时,如何清除未被扫入到变量的数据?
答、while((ch=getchar())!=EOF&&ch!='\n')
;


一行正常的字符串是以\n结尾的,一个不正常的字符串是以EOF结尾的。其中ch必须定义为int。(因为EOF实际上是一个整型),注意分号;最好换一行写,为的是增加可读性。
213、EOF在什么头文件中被定义?
答、stdio.h
214、strncpy(,,);如果源字符串小于目的字符串的存储空间,目的字符串会如何处理多余的存储空间?
答、将它们全部置零。??测试并没有。
215、三字母词是什么?
答、
216、长整型一定比整型数据长吗?
答、不是,标准规定是不能比整型数据短。
217、char 类型最小范围是什么?signed char呢?
答、0到127;signed char最小范围是 是-127到127
218、short int 和long int 及int至少是多少位?
答、16位、32位、16或32(取决于平台);
219、char 类型究竟是什么变量?
答、可能是unsigned char 也可能是signed char 取决于编译器;
220、什么是字符常量?
答、单引号相括字符。例如‘a’;‘b’等。
231、c语言中指针的本质是什么?指针变量呢?
答、地址的别名。指针变量是存储了地址的变量。即存储指针的变量。
232、int * a?*到底是修饰哪边?
答、修饰标识符a。
234、#define d_ptr_to_char char *
      d_ptr_to_char a,b;
问b的类型?
答、字符,如果定义成指针,应该使用typedef。
235、函数原型中的变量名必须与函数定义时的变量名相同吗?
答、不必,甚至不需要。
236、函数的形参能声明为static变量吗?
答、不能。
237、函数的形参能声明为register变量吗?
答、可以。
238、int a=5;
     int d(int e)
     {
         extern int a;
      }
问这两个a变量是相同的变量吗?
答、是的,第二个a可以删除。
239、int a()
{b();return 0;}
     static int b()
        {
a();
return 0;
}
问这个代码有什么问题?
答、虽然函数b具有文件作用域,但是由于函数b是定义在函数a的后面,所以不能调用函数b()。
240、全局作用域的含义是什么?
答、能被多个文件访问。
241、static变量的两个作用是什么?
答、1、修改变量的连接属性;
2、修改变量的存储类型。
242、printf语句的返回值是什么?
答、有效打印字符的个数。
243、if else语句要注意什么?
答、防止else悬空现象的发生。else总是和最近的if相匹配。
244、while语句的结构是?
答、条件表达式和循环体。
245、while语句和for语句的调整部分在哪?哪个可读性更强?
答、while语句的调整部分在循环体;for语句在条件表达式中。for语句的可读性更强,因为它将所有控制循环执行的语句收集起来放在同一个地方。for语句比while执行效率要高。
246、switch在循环体内部,在switch中出现了continue;continue作用于switch还是循环体?
答、循环体。continue对switch没有任何作用?
247、如果遇到多层循环,最内层的循环需要终止所有的循环,执行后续def非循环结构语句,采用什么方式比较好?
答、goto语句。
248、c语言的操作符与其它语言相比的特点是什么?
答、种类多,很多操作符都有不能相比的价值。
249、算术移位的特点是什么?与逻辑移位有何不同点?
答、算术移位右移时,高位填充符号位,逻辑移位是0;只有负数进行移位时,才会与逻辑移位不同。
250、c语言进行移位操作时,进行的是逻辑移位还是算术移位是由什么决定的?
答、无符号值移位操作都是逻辑移位,但是有符号变量则取决于编译器。因此如果程序中有有符号位的右移操作,这个程序就是不可移植的。但是左移操作都是相同的。
251、a<<-5;实际执行的是什么?
答、有些机器上可能向左移位27位。这种写法的执行结果取决于编译器,不同的编译器效果不可预测。且程序时不可以移植的。
252、a=x=y+3;
问x、a的值相同吗?
答、不一定,因为赋值运算的数据大小还和被赋值的变量的数据类型有关。可能造成数据截短问题。
253、getchar()返回的值类型是什么?
答、整型。非字符型。
254、a[x+f(y)]=a[x+f(y)]+3;和a[x+f(y)]+=3;执行效率一样高吗?后者与前者相比有何特点?
答、不一样,后者执行效率要高,因为前者a[x+f(y)]会被执行两次。后者可读性,书写性更好,前者要仔细比对下标。因此后者便于维护。
255、变量的标识符的本质是什么?
答、变量的存储空间的别名。
256、++a是前缀表达式还是后缀表达式?
答、前缀,++在标识符a的前面。
257、表达式1?表达式2:表达式3;这种形式的语句,当表达式1为真实,表达式3还会运行吗?当表达式1为假时,表达式2还会运行吗?
答、不会。
258、?:语句的优点是什么?
答、if(a>5)
b[2*c]=3;
    else
b[2*c]=20;
换成:b[2*c]=a>5?3:20;
这样写可以简化程序,而且不易出错。
259、怎样除去某些语句的花括号?
答、采用逗号。
260、char a,b,c;
     .........
     a=b+c;
问a=b+c的执行过程是怎样的?根据是什么?
答、b和c的值会被提升为普通整型,然后在执行加法运算。运算结果截短后,再存储到a中。
根据是:c的整型算术运算总是至少以缺省整型类型的精度来进行。为了获得精度,字符型和短整型操作数在使用之前会被转换成普通整型。
261、给出双操作符对不同类型变量操作时类型转换的规则?
答、long double、double、float、unsigned long int、long int、unsigned int 、
int;如果某个变量的类型较低,就会强制转换成较高的类型。注意int 会转换成unsigned int。
262、在16位平台上;
int a=5000;
int b=25;
long c=a*b;
问程序是否有问题?
答、因为int 在16位平台上是16位。16位能表示的最大10进制数是32767;而表达式a*b的值是125000;操作了范围,会被截短,截短后再赋值
给long型(此时为32位)的变量c,
毫无疑问是会出错的。
263、float类型的数据精度是怎样的?什么情况下整型数据赋值给float型数据不能得到准确值?
答、float 类型的数据精度一般是十进制6位整数部分,因此如果整型值超过6位,得到整型值是近似值。
264、左值在程序中一般意味着什么?右值呢?
答、左值一般表示存储空间,右值一般表示数值。
265、?:称为什么?
答、条件操作符。
266、结合性是什么?
答、相同优先级的操作符执行顺序。
267、c+--c的结果是什么?为什么?
答、由编译器决定,虽然--操作符的优先级比+高,但是它是加号的右操作数,而我们不知道加号是先执行左操作数,还是先执行右操作数。
所以结果是未知的。
268、标识符代替地址的详细过程是怎样的?
答、
269、数据类型关键字的本质是什么?
答、编译器根据数据类型的关键字选择合适的指令对变量存储空间的数据进行解释。
270、int *a=NULL;int b=*a;问这种写法合法吗?
答、不合法,因为指针的值是NULL,不能对它进行解引用。可能会访问到地址0处的数据。
271、静态内存中的指针变量能被自动初始化为NULL吗?
答、可以。
272、int a=0;*&a=25;
问这种操作正确吗?会得到什么结果?编译器如何处理?
答、会将25赋值给变量a。编译器可能会对其进行优化,省去取址指令操作和间指指令操作,直接执行a=25;
273、*100=25;这种操作正确吗?
答、错误,本意是将25赋值给地址100开始处的一个int 型内存空间。但是*的幼值必须是一个指针型(地址型)数据,所以要加上
强制类型转换改为*(int *)100=25。
274、**c;这个表达式该如何解析?
答、*(*c),按照这种方式解析。
275、标识符的本质是什么?左值的意义是什么?
答、标识符的本质是表达式,这种表达式的值体现在两个方面,一是存储空间的值,二是地址。对于指针标识符,要从左值和右值
两个方面考虑。一个表达式具有左值,意味着可以将某个值赋给表达式。
276、&cp表达式的值是怎样的?
答、只有右值,没有左值。
277、++或--与*操作符(即表示取址又表示算术)哪个优先级高?
答、一样,结合性从右到左。
278、数组下标加5,访问的数据是?
答、相对首地址偏移5个元素的地址的数据,实际上就是第6个元素。
279、能不能获得数组第零个元素之前的地址?
答、不一定能。虽然可以获得数组最后一个元素之后的一个元素的地址(再往后也不合法,且间指访问也非法),但是不能获得
第零个元素之前的元素的地址。这是编译器决定的。所以这是不可移植性的。


280、char *cp=“a”,cp+1;问cp+1这个表达式具有左值吗?++cp具有左值吗?--cp呢?如何让他们具有左值?
答、不具有,因为cp+1的右值的存储位置未知。++cp不具有左值,--cp也不具有左值。改成:*(cp+1),*(++cp),*(--cp)就能让他们具有左值。
281、能不能对两个不相关的指针执行关系运算?
答、不能。
282、如果递归使得程序执行效率太差,可以怎么解决?
答、使用迭代的方式编写程序。
283、什么是尾部递归?
答、递归函数最后一条语句调用自身。
284、尾部递归执行效率太差,如何改进?
答、将程序改成循环的形式。
285、为什么很多时候要定义long型变量,而不是定义int型变量?
答、考虑到16位机器的存在,int型变量可能只有16位。而long int 至少是32位,这是为了增加程序的可移植性。
286、int a[10]={0};
标识符a的本质是什么?
答、3个方面。数组第一个元素的存储地址,相当于指针常量,但是与指针常量相比多出来的属性是sizeof(a)能够得出数组的所有长度,
而&a得到的是a内存储的地址,即第一个元素的地址。
287、指针与下标相比哪个更有效?
答、可读性方面,下标有优势,但是有些场合指针访问更有效率。
289、char message[]="hello";
问"hello"是字符串常量吗?
答、不是。是为了初始化列表。
290、int a[10][3];
int *b=&a[3];
问a的本质是什么?
答、指向第零行的指针,这个指针实际上是个二维指针常量,*a取的是第零行的头地址,**a取得是第零行的头元素。
291、int (*p)[]=matrix;
问这种声明合法吗?
答、不合法。因为p是一个一维数组指针,但是一维数组元素个数是零。
293、void func2(int mat[][10]);
问这个函数形参的类型是什么?
答、是一个指向一维数组的指针。
294、char const a[3]={'a’,'b'};
这种写法合法吗?
答、合法。
295、char a[3]="ab";strcpy(a,"abcde");问a的数组长度不足3,strcpy会如何进行?
答、"abcde"中前3个字符会被拷贝到数组a中,多余的字符会被拷贝到数组a后面的存储空间。
296、strcat(strcpy(dst,a),b);
问这种写法对吗?
答、正确。
297、图形字符有哪些?
答、
298、间指访问操作符和点操作符哪个优先级高?点操作符和下标操作符哪个优先级高?结合性呢?
答、点操作符.优先级比间指访问操作符*的优先级高,但是和下标操作符[]相同。点操作符.和间指访问操作符*都有相同的结合性从左到右。
299、typedef struct{int a;self_ref3*b;int c;}self_ref3;问这种写法对吗?
答、不对,因为类型名self_ref3直到声明的末尾才定义,所以在结构体内部不能使用它。但是可以用一个结构体标签来声明b。
例如 typedef struct mm{int a,struct mm*b;int c;}self_ref3来定义。注意self_ref3是struct类型的别名,不是变量,
如果没有typedef,self_ref3就是变量。
300、一个结构体中如何定义另一个结构体的指针,而且另一个结构体未定义?
答、可以先声明另一个结构体的标签,然后用这个标签定义指针。最后再根据这个标签定义结构体。例如
struct a;
struct b{int c;struct a*mm;};
struct a{int d;};
301、如何初始化结构体?
答、
struct a{int m;}n={4;};
302、数组名作为&操作符的操作数时返回的是什么?
答、指向整个数组的指针(地址值)。
303、数组指针是二级指针吗?
答、不是。
304、头文件能不能包含.c文件?
答、可以。
305、如何终止宏的作用域?
答、可以用#undef命令。
306、宏定义中能使用已定义的宏名吗?
答、可以。
307、—>操作符和&操作符哪个优先级高?
答、—>操作符优先级高。并与[]操作符优先级相同。
308、结构体的位段可能造成什么问题?为什么?
答、可移植性问题。因为int位段被当作有符号数还是无符号数是由编译器决定的;位段中的位最大数目是有规定的;
无法确切知道位段中的成员在内存中是从左向右分配还是从右向左分配;两个位段会造成重叠发生。
309、联合体是如何初始化的?
答、只能按第一个变量类型初始化第一个变量。如果是按其它类型初始化会被强制转型赋值给第一个变量,截断多余数据。
而且只能赋值一个。
310、如何节省结构体变量的存储空间?
答、对结构体变量进行降序排列。
311、带有BOM的文本文件本质是什么?
答、UTF-16;
312、函数能返回数组吗?
答、不能。只能返回一个标量。
313、数组的元素可以是函数吗?
答、不可以。因为函数的存储空间长度不一样。
314、数组的元素可以是函数指针吗?
答、可以,因为函数指针的大小是一样的。
315、操作符在声明的时候的作用是什么?
答、可以赋予标识符相应的属性。因此操作符的优先级不单在运算时有用到,在声明的时候也会用到。
316、"xyz"+1的含义是什么?*"xyz"?"xyz"[2]?
答、"xyz"在表达式中是指针常量的意思,和数组名的含义相同,而且类型是指向字符的指针,所以+1以后返回指向y字符的指针。
*"xyz"和"xyz"[2]的规则相同。
317、举一个利用字符串常量解决问题的例子?
答、putchar("0123456789ABCDEF"[value%16]);可以用来输出16进制数。
318、宏与函数相比有什么优势?有什么弱点?
答、使代码更简洁,运行效率高;最重要的是函数必须定义原形,而宏不需要。宏可以实现函数不能实现的功能;但是如果宏比较长,
宏定义代码都会被插入到程序中,不管代码是否有用,或部分有用。这会增加程序的长度。
319、如何撤销从文件流中读入的字符?
答、int ungetc(int character,FILE *stream);但是如果文件的位置被改变,退回到流的字符会被丢弃。
320、fgets函数有什么特点?
答、会在缓冲区中写入一个NUL字符作为字符串的结束。并且当从文件流中遇到换行符或NUL,就会把数据写入缓冲区。
321、fgets能不能读入数据到小于两个字符长的缓冲区?
答、不能,因为其中一个字符必须为NUL。小于两个字符不可能读入数据。
322、gets读取一行时,会在缓冲区存储结尾的换行符吗?
答、不会。
323、puts写入字符串时,与fputs有什么不同?
答、它会在字符串写入之后再添加一个换行符。
324、gets函数使用时最特色的安全隐患是什么?
答、它没有缓冲区长度参数,因此输入行太长,多出来的字符就会被写入到缓冲区后面的内存位置。导致破坏一个或多个不相关变量的值。
325、int a=0;scanf(“%d”,&a);问为什么第二个参数要使用取址?
答、因为scanf第二个参数要指定一个内存位置。
326、scanf(format,**);问第一个参数如果中间有空格怎么办?如果有其它字符意味着什么?
答、如果有空格,会被忽略;如果有其它字符,必须键入该字符才能正确将数据输入到第二个参数指定的地址。如果没有输入该字符,
函数就不再读取,直接返回。
327、C语言中scanf的格式化%[a-z]能不能表示从a到z之间任意字符匹配扫入?
答、取决于编译器。但是%[abc],会将abc任意字母组成的字符串扫入特定的存储空间,以非abcd任意字符结束或以空格、换行结束。
%[^a]表示将除了a的字符,扫入特定的存储空间,以a字符为结束标志或空格、换行符结束。
328、%n格式符的含义是什么?
答、到目前为止,从输入读取的字符数。
329、printf("%+d",a);问这个语句有什么特点?
答、如果a是一个正数,会在开头添加+号例如+34;如果a是负数,仍旧打印负数。
330、printf("% d",a);问这个语句有什么特点?
答、如果a是一个非负数(与上一题规定不一样),会在开头添加空格号例如 34;如果a是负数,不加空格。
331、fread和fwrite函数的i/o读写效率怎样?
答、是最高的。因为每个位直接从流中读取或向流写入。
332、能不能根据实际写入的字符数的计算结果定位到文件流的一个位置?
答、不能。因为文本流会执行行末字符映射,使得字符不一样。
333、打印一个长整数数据时,为了增加可移植性,应该采取什么措施?
答、坚持使用l修改符。
334、结构体存在浅拷贝和深拷贝概念吗?
答、存在。
335、main函数的return作用?
答、main必须要有返回值的原因是:在C和C++中使用return-statement都是将return的值作为参数来调用exit/std::exit来终止程序。
336、问拷贝文件的重要思想是什么?
答、比较缓冲区和文件大小。
337、解释strtok运行的机制?
答、char buf[1024]="abbaabba",char *tmp1=strtok(buf,“a”);char *tmp2=strtok(NULL,"a");
第一次strtok内部有一个指针tmp,首先指向第一个不为a的数据,然后内部存在另一指针从这个位置开始向后遍历,找到a后,就将这位变为\0,然后返回tmp;
第二次使用strtok;tmp从上一次\0位置开始向后找到第一个不为a的数据,并指向它,然后另一个指针从tmp指针位置开始向后遍历,如果找到a,就将a处变为\0,并返回tmp;
总的来说,要记住两个前提,再思考运行机制。内部会存在两个指针tmp1、tmp2,tmp1用来返回指针,tmp2用来将指定位置的a变为\0,它们起始都是指向原字符串的始地址,
每次使用strtok,tmp1从tmp2指向的位置开始,找到第一个不为“a”的数据的位置,然后tmp2又从tmp1位置开始,找到第一个是"a"的数据的位置,并将其变为\0;
最后,如果strtok切割不成功,返回NULL。且第一次无论有没有切成功,都会返回字符串首元素(非"a"元素)的地址。
338、问strtok运行失败的返回值?
答、返回NULL。
339、问c语言有布尔类型吗?如果有,头文件是什么?
答、有,#include<stdbool.h>;但是必须是C99或以上。
340、问perror向什么地方发送信息?
答、标准错误文件。
341、问'a'是什么类型的数据?
答、int型。准确地说是char型。但是char型本身就是小int型数据。
342、问
1 . 下面程序段中,for 循环的执行次数是 _____
char *s = “\ta\018bc”;
for(; *s != ‘\0’; s++) 
 printf(“*”);
         (3分)
    A 、 9
    B 、 6
    C 、 5
    D 、 2
答、B;


343、4 . #pragma pack(2)
class A
{
        int i;
        union U
        {
                char buff[13];
                int i;
        }u;
        void foo(){    }
        typedef char* (*f)(void*);
        enum{red, green, bule} color;
}a;


sizeof(a)的值是()
         (3分)
    A 、 20
    B 、 21
    C 、 22
    D 、 24
答、C。
342、问char *s="\01\0y";strlen(s)的值是什么?
答、值是1.
343、问函数的形参加const最深层次的原因是什么?
答、从调用者角度考虑,使得使用函数的调用者能够知道函数会不会改变调用者的值。
344、问2100年是平年还是闰年?
答、平年。
345、可以用do while()语句模拟goto语句?
答、对。
346、问strtol的作用?
答、将字符串转换为整型数。
347、问c语言static函数的作用?
答、c语言的函数默认具有全局作用,加上static后只具有文件作用域。
348、问#define 使用时,为什么有比较多的\?
答、构成预定义宏的整体被替代物。
349、问函数的形参void arrayTwo(int matrix[1][10]);void arrayThree(int (*matrix)[10]);
void arrayFour(int **matrix),含义相同吗?
答、前两个完全相同,后一个不同。int matrix[1][10]会退化成int (*matrix)[10];
350、问不合法的常量是?
A.'\2' B."   "  C.'3'   D.'\483'
351、问int a=2;a=+3;是正确语法吗?a的值是什么?
答、正确;3;
352、取%和*以及/运算符优先级相同?
答、正确。
353、问[]、()、.、->运算符优先级相同?
答、正确。
354、问一般字符串的长度包括\0吗,但是存储空间要预留来保存\0?
答、不包括。
355、以下___是不正确的转义字符?
A.‘\\'   B.'\'   C.'081'  D.'\0'
答、BC;
356、memset、memcpy等函数效率低?
答、正确。
357、c语言的算术运算符是有精度的,int为准,其它类型数据会被转换?
答、正确。
358、问c语言位图含义是什么?
答、位图法就是bitmap的缩写,所谓bitmap,是用每一位来存放某种状态,适用于
大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。
例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示。
那么就可以开一个int数组,一个int有32个位,就可以表示32个人。操作的时候可以使用位操作。
359、gdb如何调试多线程?
答、info thread;thread;
360、有malloc和free的函数是不可重入函数?
答、正确。有全局变量及static变量的函数也是不可重入的。有标准I/o的函数也是不可重入的。
361、信号捕捉函数应该设计为可重入函数?
答、正确。
362、问strcat会不会在目的字符串尾部再添加\0?
答、会。
363、问
 char strsrc[1024]="helloworld";
    char tempsrc[1024]="\0ABC";
    //strcat(strsrc,appchar);
    strncat(tempsrc,strsrc,2);
    printf("%s\n",tempsrc);
    int i=0;
    for(i=0;i<10;i++)
    {
        printf("%X ,",tempsrc[i]);
    }
打印输出结果?
答、
he
68 ,65 ,0 ,43 ,0 ,0 ,0 ,0 ,0 ,0 


364、问
char strsrc[1024]="helloworld";
    strcpy(strsrc,strsrc+2);
    printf("%s\n",strsrc);
输出结果?
答、lloworld;


365、问strcpy有没有为目的字符串拷贝\0?
答、没有。strcat有。


366、问utf8和unicode的区别?
答、unicode两个字节表示世界所有字符;utf8会为英文、中文、生僻字符选择不同的字节存储。GB2312是为中文制定
的计算机字符集。


367、给出c语言读写文件的案例?
答、
 FILE *ptrfile=fopen("D:\\qt_code\\build-agrithum-Desktop_Qt_5_8_0_MinGW_32bit-Release\\release\\a.txt","r+");
    if(ptrfile==NULL)
    {
        perror("file open fail");
        return;
    }
    char buf[1024]={0};


    fread(buf,512,1,ptrfile);
    fwrite("hello",5,1,ptrfile);
    fclose(ptrfile);
    printf("buf:%s\n",buf);

368、问printf("%.2f\n",8/5);结果?
答、1.60;


369、问
printf("%d\n",8/5);输出结果?
答、1;


370、问%f和%lf的区别?
答、对应float和double;


371、initializer element is not constant ?
答、全局变量的值不能在编译时确定,要在执行时确定(编译原理),也就是说,全局变量在函数外部应只是声明,
赋值的操作应该在函数中进行。????、


372、c语言全局变量的值不能在函数外部赋值?
答、错误。


373、函数内定义的变量作用域属于函数?
答、正确。


374、已声明的变量再定义时不需要添加类型?
答、正确。


375、使用归并排序要注意什么?
答、被比较的两个段必须是有序的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值