指针
第一节 什么是指针
关于指针一词,在K&R C中,有下面这样的说明。
- 指针是一种保存变量地址的变量,在C中频繁地使用。
照字面意思来说,很容易把指针当成变量。但实际上并非如此。
此外,说道pointer,就离不开pointer type。但提到type,立刻就会让人想起“int type”,"double type"等。
所以,再回来说pointer type,他不是单独存在的,它是由其他类型派生而成的。所以说“int *”即指向int的pointer type
因为pointer type是type,所以它和int type,double type是一样的。也存在Pointer variable,Pointer value。
*要点*:先有“point type,”所以有了"pointer variable"与“pointer value”。
例如,在C languange中。
int a = 123;
int 是"type", a是"int variable",4 是“int type value”
同理:
int *p = &xiaoming
int *是“type”,p是“pointer variable”, xiaoming该变量的地址称为“pointer type value”。
第二节 地址与“&”
几乎所有的处理程序中,所谓的“pointer type value”,实际是指内存的地址(Memory address)
变量的内容是保存在内存的某个地方的,“某个地方”的说法总是会让人产生困惑。因此,就像送快递的时候使用“门牌号”确定“地址”一样,在内存中,我们也给变量分配“门牌号”。在C的内存世界中,“门牌号”被称为地址。
#include <stdio.h>
int main()
{
int Rose = 23;
int Jack = 25;
int *Rose_P;
/*输出Rose,Jack和Rose_P的住址在哪里*/
printf("&Rose..%p\n",&Rose);
printf("&Jack..%p\n",&Jack);
printf("&Rose_P..%p\n",&Rose_P);
/*将Rose家的住址赋予Rose_P*/
Rose_P = &Rose;
printf("Rose_P..%p\n",Rose_P);
/*通过Rose_P输出Rose的值*/
printf("*Rose_P..%d\n",*Rose_P);
/*注意,Rose的值是int type,所以用“%d” */
/*十年过去了,Rose多大了呢,户口的年龄加10了,她的真正年龄呢*/
*Rose_P += 10;
printf("Rose..%d\n", Rose);
return 0;
}