专栏首页章鱼的慢慢技术路对C语言中指针的入门理解

对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\n",*xiaolin);
    printf("小红喜欢的人的身高:%d\n",*xiaohong);

    xiaohong = &xiaoli;  //小红指向小李(移情别恋) 
        
    *xiaohong = 180;   //将小红指向的对象赋为180 == 修改小红喜欢的人的身高
    
    printf("\n");
    printf("小张的身高:%d\n",xiaozhang);
    printf("小李的身高:%d\n",xiaoli);
    printf("小王的身高:%d\n",xiaowang);
    printf("小玲喜欢的人的身高:%d\n",*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\n",*xiaolin);
    printf("小红喜欢的人的身高:%d\n",*xiaohong);

    xiaohong = &xiaoli;  //int 175
        
    *xiaohong = 180;   //修改小李的身高,从175变为180 
    
    printf("\n");
    printf("小张的身高:%d\n",xiaozhang);
    printf("小李的身高:%d\n",xiaoli);
    printf("小王的身高:%d\n",xiaowang);
    printf("小玲喜欢的人的身高:%d\n",*xiaolin);
    printf("小红喜欢的人的身高:%d",*xiaohong);  //输出180

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 记账类问题汇总

    Zoctopus
  • Python中的高级turtle(海龟)作图(续)

    Zoctopus
  • Go指南_切片的长度与容量

    Zoctopus
  • Python正则表达式的运用与常用的正则表达式(附超有用的小项目练习)

    在前天我们详细讲解了Python正则表达式相关知识点。那么本文带来的是偷学Python第三十二天:Python正则表达式的运用(附超有用的小项目练习),其他内容...

    刘早起
  • tar归档报错tar: Removing leading `/' from member names

    今天用tar命令归档文件的时候一直提示“tar: Removing leading `/' from member names”

    张琳兮
  • "2019 Elastic 开发者大会"大约在冬季重装来袭!

    Elastic 中国开发者大会 2019 (Elastic Dev Day China) 是由 Elastic 官方再一次在中国举办的开发者大会,主要围绕 El...

    腾讯云ES团队
  • 天天都在用的 Tmux,可你知道如何在多用户间共享 Session 吗?

    Tmux Server 管理着多个 Session,而一个 Session 可以被多个 Tmux Client连接。这些 Tmux Client 通过一个 U...

    iMike
  • 两名餐饮人员告诉你入侵取款机拿现金竟是如此简单

    美国一位小餐馆的店主在18个月里通过ATM柜员机取了40万美元,但这些钱不是他的。 这位名为法塔赫的店主和他的同伙克里斯·弗莱得,面临30项计算机欺诈和密谋罪名...

    安恒信息
  • Java单体应用 - 架构模式 - 03.设计模式-05.原型模式

    原文地址:http://www.work100.net/training/monolithic-architecture-design-patterns-pro...

    光束云
  • Java面试基础之ArrayList操作

    ArrayList应该是Java开发中经常见到的数据结构了。 曾经在一个面试中遇到这么个问题,

    PhoenixZheng

扫码关注云+社区

领取腾讯云代金券