重读C专家编程

1.const char** 与char**

VC6.0测试,编译报错cannot convert parameter 1 from 'char ** ' to 'const char ** 'Conversion loses qualifiers

关于此种赋值规定:

两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符

(1)const char* 与char* ,具有相容类型char,不同的是cont char*是具有限定符const的char的指针,char*是没有限定符的char的指针

(2)const char** 与char**,首先应明白cost char*并不是一个具有限定符类型,它只是一个单纯的指针 ,const char**的类型因此也是一个没有限定符的单纯的指针,意思是其指向一个具有const限定符的char类型的指针的指针,而并不是const类型的char**指针,const char**与char**都是指针,但他们指向的类型是不同的。

 

2.#define a(x) ti(x)如果不小心写成了 #define a (x) ti(x) 则a(y) 则表示成了 (x) ti(x)(y)

 

3.关于time_t

 

附上python脚本:

 

 

4.NULL被大量定义在标准头文件中,通常来表示一个空指针,0是一个整型常量,'/0'是一个字符常量,而NUL是一个字符常量的名字。

 

5.关于switch在C语言中的用法:

(1)switch花括号之后生命的变量,即使进行了初始化,也不会执行,测试代码:

(2)case 段内容即使错误,也会编译通过,但会显示一条警告,VC6测试通过

(3)由const带来的错误,显示error C2051: case expression not constant,这是由于在C中const关键字并不真正表示常量

 

6.关于static

(1)利用static使程序第一次与第二次运行的结果不一致

(2)static修饰的函数可见性仅限于本文件

 

7.容易引起的误解

(1)*p.f                              等价于         *(p.f)

(2)c=getchar()!=EOF        等价于         c=(getchar()!=EOF)

(3)n<<4+m                       等价于         n<<(4+m)

(4)i=1,2                            等价于          (i=1) 然后执行常量2的计算,所以i最后=1

 

8.fgets没规定是阻塞,但读取终端的时候通常阻塞

9.需要注意的空格

(1)最大字符串原则

(2)n=*x/*y   /*被理解成/*注释

 

9.typedef 与#define的区别

(1)对于typedef int x 和#define y int , 则 unsigned y n=0是正确的; unsigned x n=0;是错误的

(2)对于#define int_ptr int*,则int_ptr a,b,a和b被扩展为不同的类型,但typedef不存在这种问题

(3)经典的 typedef char* ptr, 则const ptr表示的是

 

10.数组与指针的区别

(1)extern int *x 与 extern int y[]

(2)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值