《C和指针》笔记1

1.scanf格式符        p9
ld    long
lf    double

2.三字母词        p22
    为了表示一些特殊的字符,在老式的机器键盘中可能没有的字符,特别约定了一种三字母词,三字母词都以??开始,如下:
??(     [    ??<    {    ??=    #    ??!    |    ??-    ~
??)    ]    ??>    }    ??/    /    ??'    ^   

3.特殊字符        p23
/a        警告音,在我电脑上不能发音。
/v        垂直制表符
/ddd        八进制转义
/xddd    十六进制转义,注意:如果超过范围,那么结果是未定义的。(国内教科书直接告诉我们是/xdd)

4.mystery.c        p25

5.char            p29
    char如果没有声明称signed,unsigned,那么char到底是哪一种完全由编译器决定。正如int的长度一样。(国内教科书直接是unsigned char)

6.枚举            p32
    枚举的值是int值,可以赋值给其它int变量,其它int常量也可以赋值给枚举变量,并不会出现什么警告(国内教科书指出必须强转)

7.字符串常量        p34
    字符串常量的存储有编译器决定,是否把不同地方出现的同一个字符串常量存储在同一个位置,字符串常量通常被标记为只读,所以如果你需要修改字符串的内容,那么不要声明为常量,例如:
char *pstr="hello world";
pstr[0]='H';
在gcc下,这样的代码能通过编译,但是运行时会发生段错误。因为试图修改字符串常量。如果你要修改字符串的内容,那么应该使用数组。如:
char pch[]="hello world";
pch[0]='H';
这也是指针和数组的另一个有区别的地方。我们知道指针和数组其实大部分地方都相同,另外有区别的地方是对于sizeof函数,以及跨文件声明。

8.指针书写规范        p36
    声明如下指针
int* a;
int *a;
    两种方式效果一模一样,但是由于很多初学者会将*和变量a连在一起对待,认为*a是一个指针,那就大错特错了。而前一种书写方式则简单明了。但是,当同时声明多个变量时,就不同了。如:
int* a,b,c;
有没有一种错觉:声明了三个指针a,b,c。

9.typedef和#define        p38
    正如在《C陷阱与缺陷》中说的那样,不要使用#define来定义数据类型,而是要正规的使用typedef。例如
#define    MY_TYPE    char *
MY_TYPE pa,pb;
展开后变成:char * pa,pb;
本来你想定义两个指针变量,但是这里其实只有pa是指针变量。

10.const            p38
    在《C专家编程》中,指出const关键字极易误导人,应该修改为readonly。以我的理解,const修饰离他近的变量。如下:
int const a;
const int a;
上面两个声明效果一样。普通类型极其简单,加上指针就有点麻烦了。如下:
int const *a;    或    const int *a;
int * const a;
int const * const a;    或    const int * const a;
第一行的声明了*a不能改变,但是指针a可以改变。
第二行声明了指针a不能改变,*a的内容可以改变。
第三行声明了指针a和*a都不能改变。
    const变量的值不能修改,变量获得值有两种方法,一种是初始化,另一种就是作为函数形参,从实参中获得。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值