C 语言

指针

2018-05-02  本文已影响0人  RicherYY

指针式C语言的灵魂,我简单写一下自己的见解

指针(pointer)简介

指针是一个值为内存地址的变量
变量就是一个内存地址

指针1.PNG

int *ptr_year取地址
ptr_year = &year
就是把int year的地址赋给了ptr_year
我们就说ptr_year指向了变量

指针的基本用法

数据类型 * 指针变量名

指针2.PNG
定义指针的时候最好加ptr或者p
int ptr_num = NULL; //指针初始值为空,不指向任何地址

&取地址符

指针3.PNG

相当于取num的地址赋给了ptr_num变量

代码练习

int main()
{
    int num = 9;
    int * ptr_num = #
    printf("num的变量地址是;%p\n",ptr_num);                      //%p表示打印指针类型数据

间接运算符*

指针4.PNG

相当于根据*ptr_num的地址所对应的空间直接去修改
相当于操控这个空间 这个地址对应的值直接修改

抽象一点儿讲指针就相当于一个名片(*)就是取这个地址的值
&是取地址,千万不要混淆

nt main()
{
    int num = 9;
    int * ptr_num = #
    printf("num的变量地址是;%p\n",ptr_num);                      //%p表示打印指针类型数据
    printf("ptr_num对应的值为;%d\n",*ptr_num);                   //取ptr_num所对应的值

星号是取值的意思

代码练习

int main()
{
    int num = 9;
    int * ptr_num = #
    printf("num的变量地址是;%p\n",ptr_num);                      //%p表示打印指针类型数据
 
    //使用指针修改变量值
    *ptr_num = 9999;                                              //找到这个地址所对应的空间,然后把这个空间的值修改成9999
    printf("修改之后的值为;%d",*ptr_num);                        //打印num表示相同值

通过指针的地址找到原指针对应的值

int main()
{
    int num = 9;
    int * ptr_num = #
    int ** ptr_num2 = &ptr_num;                                  //这里需要定义变量
    printf("num的变量地址是;%p\n",ptr_num);                      //%p表示打印指针类型数据
    printf("ptr_num对应的值为;%d\n",*ptr_num);                   //取ptr_num所对应的值
    //使用指针修改变量值
    *ptr_num = 9999;                                             //找到这个地址所对应的空间,然后把这个空间的值修改成9999
    printf("修改之后的值为;%d\n",*ptr_num);                      //打印num表示相同

    printf("指针的内存地址;%p\n",ptr_num2);
    
    //如何通过指针的指针地址,访问到原指针所对应的内存空间?
    printf("\n原空间num所对应的值为;%d\n",**ptr_num2);

练习

int main()
{
    int num1 = 1024;
    int num2 = 2048;
    int * ptr1;
    int * ptr2;
    ptr1 = &num1;
    ptr2 = &num2;

    printf("num1的值是;%d\tnum1的内存地址是;%p\n",num1,ptr1);
    printf("num2的值是;%d\tnum2的内存地址是;%p\n",num2,ptr2);
    //将变量1的值赋给变量2
    //*ptr2 = *ptr1;等价写法 num1 = num2

    ptr2 = ptr1;                            //ptr1和ptr2的地址都指向num1的值
    printf("重新赋值以后结果\n");
    printf("num1的值是;%d\tnum1的内存地址是;%p\n",num1,ptr1);
    printf("num2的值是;%d\tnum2的内存地址是;%p\n",num2,ptr2);


    *ptr2 = 11111;
    printf("重新赋值以后结果\n");
    printf("num1的值是;%d\tnum1的内存地址是;%p\n",num1,ptr1);
    printf("num2的值是;%d\tnum2的内存地址是;%p\n",num2,ptr2);
指针5.PNG
上一篇下一篇

猜你喜欢

热点阅读