读书笔记:《The C Programming Language》

第二章 类型、运算符与表达式

2.9 按位运算符

C语言提供了6个位操作运算符。这些运算符只能作用域整型操作数,即只能作用于带符号或无符号char、short、int、long类型:

&   按位与(AND)
|   按位或(OR)
^	按位异或(XOR)
<<  左移
>>  右移
~   按位求反(一元运算符)

第五章 指针与数组

ANSI C使用类型void *(指向void的指针)代替char * 作为通用指针的类型

5.1 指针与地址

地址运算符&只能应用于内存中的对象,即变量与数组元素。它不能作用于表达式、常量或register类型的变量

一元运算符*和&的优先级比算术运算符的优先级高,因此,赋值语句y = *ip + 1将把*ip指向的对象的值取出并加1,然后再将结果赋值给y,而下列赋值语句*ip += 1则将ip指向的对象加1,它等同于++*ip(*ip)++,语句(*ip)++中的圆括号是必须的,否则,该表达式将对ip指向进行加1运算,而不是对ip指向的的对象进行加1运算,这是因为,类似于*和++这样的一元运算符遵循从右至左的结合顺序

5.2 指针与函数参数

5.3 指针与数组

a[i] == *(a+i)

在函数定义中,形式参数char s[]和char *s是等价的

5.4 地址算术运算

如果指针p和q指向同一个数组的成员,那么它们之间就可以进行类似于==、!=、<、>=的关系比较运算

指针可以和整数进行相加或相减运算,例如,结构p+n,表示指针p当前指向的对象之后第n个对象的地址

有效的指针运算包括相同类型指针之间的赋值运算,指针同整数之间的加法或减法运算,指向相同数组中元素的两个指针间的减法或比较运算,将指针赋值为0或指针与0之间的比较运算

5.5 字符指针与函数

5.6 指针数组以及指向指针的指针

5.7 多维数组

如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数。数组的行数没有太大关系,因为前面已经讲过,函数调用时传递的是一个指针,它指向由行向量构成的一维数组,其中每个行向量是具有13个整型元素的一维数组

f(int daytab[2][13]) { ... }
f(int daytab[][13]) { ... }

因为数组的行数无关紧要,所以,该声明还可以携程

f(int (*daytab[13])) { ... }

这种声明形式表明参数是一个指针,它指向具有13个整型元素的一维数组。因为方括号[]的优先级高于*的优先级,所以上述声明中必须使用圆括号。如果去掉括号,则声明变成

int *daytab[13]

这相当于声明了一个数组,该数组由13个元素,其中每个元素都是一个指向整形对象的指针。一般来说,除数组的第一维(下标)可以不指定大小外,其余各维都必须明确指定大小

第六章 结构

6.4 指向结构的指针

附录A 参考手册

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值