C和指针

在C中,我们可以使用指针来访问数据。

完整的说法叫,使用间接访问操作符(也就是*号)进行间接访问。这个指针也叫解引用指针。

所有在内存中的数据无非是0和1,具体表示什么含义需要我们去定义。内存中的值可以表示整数、可以表示浮点数、字符串、甚至是另一个内存的地址。

而例如“int *”的指针用法,表示这个内存存储的值是一个内存地址,而这个内存地址存储的值表示整形。

&表示取地址操作。

*&a=25 和 a=25 的结果是相同的,都是将25赋值给了a。但前者涉及了更多的操作。在不同的编译器(或优化器)的情况下, 如果没舍弃其中多余的操作,产生的机器码可能更慢,更大。而且源码的可读性更差。

对于字面量,需要进行类型转换。*(int *)100=25,这语句表示将25赋值给地址为100的内存。强制转换的过程叫做指向整形的指针。而100是字面量,默认为整形。这种使用方法通常在嵌入式编程中,因为你无法指定内存位置100的内容是什么。而嵌入式编程中,通常可以指定内存存储的东西。

对于两种声明方式,int* a和int *a,有两种看法,第一种是可以看作指向整形的指针,第二种可以看作整形的变量,这个变量代表地址。

C函数的所有调用均是“传值调用”。例如数组名传递的是地址,而地址也是值。函数传递的只是一份指针的值。