• 对C语言中指针的入门理解


    通过一个例子引出对指针的概念理解

    1,例子

    #include<stdio.h>
    int main(void)
    {
        int xiaozhang = 178;  //小张的身高 
        int xiaoli = 175;  //小李的身高 
        int xiaowang = 179;  //小王的身高
        
        int *xiaolin,*xiaohong;
        
        xiaolin = &xiaozhang;  //小玲指向小张 
        xiaohong = &xiaowang;  //小红指向小王 
        
        printf("小玲喜欢的人的身高:%d
    ",*xiaolin);
        printf("小红喜欢的人的身高:%d
    ",*xiaohong);
    
        xiaohong = &xiaoli;  //小红指向小李(移情别恋) 
            
        *xiaohong = 180;   //将小红指向的对象赋为180 == 修改小红喜欢的人的身高
        
        printf("
    ");
        printf("小张的身高:%d
    ",xiaozhang);
        printf("小李的身高:%d
    ",xiaoli);
        printf("小王的身高:%d
    ",xiaowang);
        printf("小玲喜欢的人的身高:%d
    ",*xiaolin);
        printf("小红喜欢的人的身高:%d",*xiaohong);
        
        return 0; 
     } 

    2,理解

    当指针p的值为对象x的地址时,我们一般会说“p指向x”。

    通过以上例子,我们在这里可以将“指向”理解成“喜欢”,因此,指针p的值为对象x的地址我们可以理解成“p喜欢x”

    接着进行“xiaohong = &xiaoli”的复制,我们就可以得出“小红喜欢小李”。

    xiaolin、xiaohong的数据类型是“指向int型变量的指针型”

        xiaolin = &xiaozhang; 
        xiaohong = &xiaowang; 

    从以上赋值语句也可以发现,&xiaozhang、&xiaowang的类型也是“指向int型变量的指针型”。

    所以说取地址符(&)不光可以理解为取址运算符,也可以理解为生成指针,表达式&xiaozhang是指向xiaozhang的指针,其值为xiaozhang的地址

    指针运算符

    在进行显示的地方,就要用到叫作指针运算符的单目运算符*。

    将指针运算符*写于指针之前,就可以显示该指针指向的对象内容。

    因此,*xiaolin就等于“xiaolin指向的对象”,*xiaolin就是xiaozhang。*xiaolin是xiaozhang的别名

    所以当p指向x时,*p就是x的别名

    指针运算符的赋值

    当指向 xiaoli 的指针赋给xiaohong,使 xiaohong 指向 xiaoli,这样一来就变成“xiaohong 喜欢 xiaoli”

    小红从小王移情别恋给小李了,啧啧...

    所以,如果将指向其他对象的指针赋给指针变量,那么该指针变量就会指向这些对象。

    因此,上例的程序运行结果如下

        xiaolin = &xiaozhang;  
        xiaohong = &xiaowang;  
        
        printf("小玲喜欢的人的身高:%d
    ",*xiaolin);
        printf("小红喜欢的人的身高:%d
    ",*xiaohong);
    
        xiaohong = &xiaoli;  //int 175
            
        *xiaohong = 180;   //修改小李的身高,从175变为180 
        
        printf("
    ");
        printf("小张的身高:%d
    ",xiaozhang);
        printf("小李的身高:%d
    ",xiaoli);
        printf("小王的身高:%d
    ",xiaowang);
        printf("小玲喜欢的人的身高:%d
    ",*xiaolin);
        printf("小红喜欢的人的身高:%d",*xiaohong);  //输出180
  • 相关阅读:
    GET or POST?
    ASP.NET AJAX简述
    C# 后台调用存储过程
    S,C,SC,表
    js判定浏览器的种类
    sql 数据表添加或删除或修改字段 alter
    sql判定数据表是否存在,存在删除,再新建表或修改表名
    sql 所有的表建好后,为表添加外键约束
    打开office弹出steup error 的解决办法
    a标签的属性
  • 原文地址:https://www.cnblogs.com/OctoptusLian/p/8574827.html
Copyright © 2020-2023  润新知