C语言系列

来源:互联网 发布:sql insert语句怎么写 编辑:程序博客网 时间:2024/05/21 19:50

边界对齐:在要求边界对齐的机器上,整型值存储的起始位置只能是某些特定的字节,通常是2或4的倍数。

 

变量的值,就是分配给该变量的内存位置所存储的数值,即使是指针也不例外。

 

一个常见错误:

int *a;

*a = 12;

声名一指针变量,后面那条语句把12存储在a所指向的内存位置。

此处,我们声名了一指针变量a但未对他初始化,所以无法预计12被存储在什么地方。这个操作是非常危险的 这是 野指针的一种情况。

 

 

对指针进行解引用操作可以获得它所指向的值。但NULL指针并未指向任何的东西,因此对NULL进行解引用操作室非法的,所以在对指针进行解引用前,必须保证它并非NULL指针。

 

*&a = 25;

把值25赋值给变量a。&操作符产生变量a的地址,它是一个指针常量,*操作符访问其操作数所表示的地址。在这个表达式中,操作数是a的地址,所以值25就存储在a中。

 

*100 = 25;

这条语句是错误的,初一看,觉得是把值25存储在100的位置上,其实不然,因为解引用(间接访问操作只能用于指针型表达式,不能用于整型),如果要吧25存储在位置100,你必须使用强制类型转换将整型转换为指针型。

*(int *)100 = 25;(这个更好 *(int * const)100 = 25;)。

 

&操作符的结果是个右值,它不能当作左值使用,当表达式&ch进行求值时,它的结果应该存储在计算机的什么地方呢?这个表达式并未标识任何机器内存的特定位置,所以它不是一个合法的左值。