2018-07-05

指针

第一节 什么是指针

关于指针一词,在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 variablePointer 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  

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;
}
2018-07-05_第1张图片
QQ截图20180704225429.png

你可能感兴趣的:(2018-07-05)