1. for( ; 1 ; ) 等价于 while(1)
2. 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。
3. 局部变量能否和全局变量重名? 能,局部会屏蔽全局。要用全局变量,需要使用"::"
4. 对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline
5. 引用与指针的区别 1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
举个例子 :
int a; //声明变量a int& ra = a; //声明一个引用,名字是ra,ra引用了a 注意,ra声明的时候必须同时给出它到底引用了谁 int& ra; //只声明不指明是不对的。 还有,引用一旦声明,就不能再修改到其他变量上了,这与指针不同。 ra = b; //这是不行的,因为已经int &ra = a了
6. switch()除了整型,枚举类型,字符型,其他的都不行。譬如:字符串,浮点型这些都不可以作为switch的参 数类型。
7. 写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
改后答案依次为9,10,10,11
8. sizeof 是关键字不是函数!
9. register int a 是定义一个变量, 只不过这个变量是保存在寄存器而已, 不在内存,好处是存取速度快,缺点 是不能&取地址
10.return 返回值不能是指向栈内存的指针,如:
char *test()
{
char str[10]={0};
...........
return str;
}
这个指针是指向栈内存的指针 当函数调用结束时所指向的地址也就不复存在了(或者说是被销毁无效了)
11.一个空的结构体大小不能为0,但不能大于非空结构体的最小值(里面刚好只有一个char变量),也就是要大于0,但又要不大于1,折中其大小刚好为1Byte。
12.int a,b,c; c=a/b的值得正负性由b决定 c=a%b的余数的正负性由a决定
13.#define BSC //
BSC printf("this is a test\n");
编译时会报错,原因在于注释先于预处理,也就是编译器先将注释的拿掉,然后进行预处理,最后才正式的编译, 所以,当处理注释时没有将上面语句注释掉,等到预处理后,虽然BSC被替换成// 但于事无补,所以编译出错, 因为编译时不认识// 。
14.char str[10]={0}; 则 &str+1 步进是偏移10*1个字节 而&str[0]+1 步进偏移1*1个字节 后者等效str+1,也是偏移一个元素,换而言之,&str是数组的首地址,str是数组首元素的首地址。
15.若释放一块由malloc获得的内存时,即free(p),记得要 p=NULL重新初始化,因为free只是将p指向那块内存的联系斩断,p还是指向那块内存的首地址,只是此时没权限,可这个地址还是存在p里有隐患!!!俗称野指针
16.所谓的内存泄露是指堆由malloc或者new申请后用完没通过free或者delete释放,导致可用的堆越来越少了。
17.getchar()返回的事int型的 不是char!!太坑人了..... 原型 int getchar(void)
18.if(a&&b) 只有a为真时才看b,否则看都不看b就跳出 同理 ||只有a为假才看b
19.int i=3, j = sizeof(++i+ ++i); 则输出j=2(16位处理器)或4(32位处理器)即等效sizeof(int) 而i=3, 即不执行里面的 (++i+ ++i) 因为sizeof所占的大小在编译时就已经确定了,不需要再运行来确定,也就是说, 不会执行(++i+ ++i)所以i还是原值。
20.char *p="daw"; printf("%d\n",strlen(p)); 输出是3 即输出是有效值
21.printf("",x,++x); 计算是从右到左 所以先算 ++x 再算x 所以结果一样
22.源文件(.c)经过编译生成中间文件或者叫目标文件(.o/.obj),再由连接器将启动代码(相当程序与操作系统的接口)、库代码三者合成可执行文件(.exe)。
23.int main(void) 是C99标准 老的版本是 main() C90对其支持,还有就是 void main() 不过最好不要用后两者
24.传统上,C要求在代码块{}开始处声明变量然后才是其他语句,而在C99遵循C++惯例 声明语句可以放在代码块任 意处,不过一定是放在首次使用它的前面。为了兼容及习惯,还是继承“优良”传统吧。
持续更新中........................