学习笔记_C语言

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++惯例 声明语句可以放在代码块任    意处,不过一定是放在首次使用它的前面。为了兼容及习惯,还是继承“优良”传统吧。


 
持续更新中........................
 
 
 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值