1.c语言中的volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如 操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行 优化,从而可以提供对特殊地址的稳定访问。
2.
访问越界了:定义的数组是a[0]-a[9],循环里面是到a[10]了
3.
#include<stdio.h> void foo(void) { int i; printf("%d\n",i); i = 999; } int main(void) { foo(); //printf("hello\n"); foo(); return 0; }运行结果可能为什么?为什么?在两个foo();之间加入printf("hello\n");呢?
结果为随机数;或者是随机数 999;因为第一次释放的空间有可能被第二次重新申请。
4.
#include<stdio.h> int main() { /*union _UnionTest { unsigned int i; unsigned char ch[2]; }; _UnionTest uniontest; uniontest.i = 0x1420; printf("%d\t%d\n", uniontest.ch[0], uniontest.ch[1]); }运行结果是什么?
32 20
小端优先,先存储20再存储14,后面补0,把上面数转化为2进制的数。由于是共享内存,所以把第一个字节给[0],第二个字节给[1],你算一下,20对应的十进制是32,14对应的十进制是20
#include<stdio.h> int main() { char buf1[10] = "hello"; char buf2[10] = "hello"; if (buf1 == buf2) printf("equal"); else printf("not equal"); }
输出结果是not equal:if语句比较的是地址值而非字符串的值。
5.
阅读下列函数说明,并编写函数 (10分)(考点:工具语言 难度:较高)
<函数说明>
本题中的函数encode()实现对字符串的变换.变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:
(1) 若已知字符串的当前字符不是数字字符,则复制该字符于新字符串中.
(2) 若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中
(3) 若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中.
(4) 以上述一次变换为一组,在不同组之间另插入一个下划线’_’用于分隔.例如:encode()函数对字符串26a3t2的变换结果为666_a_tttt_2
假定调用变换函数encode()时的已知字符串中不含下划线字符.
<函数原形>
int encode(char *instr,char *outstr);
代码:#include<stdio.h> int encode(char *instr,char *outstr) { char *ip,*op,c; int k,n; ip=instr; op=outstr; while (*ip) { if (*ip>='0'&&*ip<='9'&&*(ip+1)) { n=*ip -'0' + 1; c=*++ip; for (k=0;k<n;k++) { *op=c; printf("%c",*op); op++; } } else { *op=*ip; printf("%c",*op); op++; } if(*(ip+1)) { *op='_'; printf("%c",*op); } op++; ip++; } *op='\0'; return 0; } int main() { char *s = "26a3t2",*p; p = new char; encode (s,p); return 0; }