C语义陷阱

1.   任何指针都是指向某种类型的变量

2.   如果一个指针指向的是数组中的一个 元素,那么我们只要给这个指针加1,就能够得到指向数组中下一个元素的指针,同样的,如果我们给这个指针减1,得到的就是指向该数组中前一个元素的指针。

3.  如果我们在应该出现指针的地方,却采用了数组名来代替,那么数组名就被当做指向该数组下标为0的元素的指针。

4.  对于int calendar[12][31]  ,而calendar[4]又是什么含义呢?

        因为calendar是一个有着12个数组类型的元素的数组,它的每个数组类型元素又是一个有着31个整形元素的数组,所以calendar[4]是calendar数组的第5个元素,是calendar数组中12个有着31个整形元素的数组之一,因此,calendar[4]的行为也就表现为一个有着31个整形元素的数组的行为。例如,sizeof(calendar[4])的结果是31与sizeof(int)的乘积。

5.   C语言中,字符串常量代表了一块包括字符串中所有以及一个空字符(‘\0’)的内存区域的地址。

6.  在C语言中,我们没有办法可以将一个数组作为函数参数直接传递。如果我们使用数组名作为参数,那么数组名会立刻被转换为指向该数组第1个元素的指针。因此,将数组作为函数参数毫无意义。所以,C语言中会自动地将作为参数的数组声明为相应的指针声明。

7.  复制指针并不同时复制指针所指向的数据。

8.  编译器保证由0转换而来的指针不等于任何有效的指针。

9.  C预言中,一个拥有n个元素的数组,却不存在下标为n的元素,它的元素的下标范围是从0到n-1为止。

10.  *buffer++ = c;  这个语句把输入字符c放到缓冲区中,然后指针buffer递增1.

11.  在大多数C语言实现中,--n >= 0至少与等效的n-- > 0一样快,甚至在某些C实现中还要更快。第一个表达式--n >= 0的大小首先从n 中减去1,然后将结果与0比较;第二个表达式则首先保存n ,从n 中减去1,然后比较保存值与0的大小。

12.  数组中实际不存在的“溢界”元素的地址位于数组所占内存之后,这个地址可以用于进行赋值和比较。当然,如果要引用该元素,那么就是非法的了。

13.  C语言中的某些运算符总是以一种已知的,规定的顺序来对操作数进行求值的,而另外一些则不是这样的。例如

a < b && c < d

C语言的定义中说明a < b 应当首先被求值,如果a 确实小于b ,此时必须进一步对c < d 求值,以确定整个表达式的值。但是a大于或等于b,则无需对c < d 求值,表达式肯定为假。另外,要对 a < b 求值,编译器可能先对a求值,也可能先对b 求值,在某些机器上甚至有可能对它们同时并行求值。

14.  C语言中,存在两类算术运算,有符号运算和无符号运算,在无符号算术运算中,没有所谓的“溢出”一说:所有的无符号运算都是以2的N 次方为模,这里n是结果中的位数。

15.  对于函数,如果并未显示的声明返回类型,那么函数返回类型就默认是整形。对于main()函数,返回0代表成功,返回值非0代表程序执行失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值