C语言新手小白详细教程(7)指针和指针变量

举报
意疏 发表于 2025/08/06 14:15:01 2025/08/06
【摘要】 C语言指针

希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,==点赞 + 关注+ 收藏==支持一下笔者吧~


开篇说明

本章节我们学习C语言中一个非常重要的概念 指针。在之前的章节,我们已经接触过指针这个概念了,比如scanf()中的地址列表,这就是指针。所以,用一句话总结 指针是什么呢?指针就是地址!

1、指针的定义


指针:就是变量的内存地址。
指针变量就是存放内存地址的变量。(存放指针的变量)

从以上的定义我们可以知道,首先指针是一个值,这个值指的是内存地址。而指针变量,和我们之前学过的int型、char型等变量类似,不同的点在于,指针变量存储的是内存地址(指针),int型变量存储的是整型数据,char型变量存储的是字符型数据。


接下来我们用图示的形式来解释一下 指针:


如图所示,int型变量i、j、k 大家肯定已经非常熟悉了。这里面的内存地址3020处存储的指针型变量i_pointe,上面提过,指针存储的是内存地址。i_pointer里存储的2000是一个内存地址,即变量i的地址。注意与变量k做区别。


2、申明指针变量

我们知道,申明一个变量需要指出这个变量的数据类型,比如int i;和char i;
同样,在声明指针变量时,也要明确这个指针变量里存储的是哪类型变量的地址。
申明格式:
数据类型 * 指针变量名称;

  1. 申明存储int型变量地址的指针变量

int * i_pointer;// i_porinter 是指向 int 型变量的指针

  1. 申明存储char型变量地址的指针变量

char * ch_pointer;// ch_porinter 是指向 char 型变量的指针

3、取地址符 &

我们记得我们在scanf()函数中提到过的取地址符&。
指针变量&i的值是变量i在内存中的地址,指针变量i_pointer的值也是变量i在内存中的地址,所以:

int * i_pointer;

i_pointer == &i;


4、为指针变量赋值

指针变量存储的是内存地址,那么给指针变量赋一个内存地址型的值即可

#include <stdio.h>
int main(){
    int i = 5;//定义整型变量i
    char ch = 'A';//定义字符型变量ch

    int * i_pointer;//定义整型指针变量i_pointer
    char * ch_pointer;//定义字符型指针变量ch_pointer

    i_pointer = &i;//将i的地址赋值给i_pointer
    ch_pointer = &ch;//将ch的地址赋值给ch_pointer

    printf("i的值为:%d\n", i);
    printf("i的地址为:%p\n", i_pointer);//输出i_pointer的地址
    printf("i的值为:%d\n", &i);
    printf("ch的值为:%c\n", ch);
    printf("ch的地址为:%p\n", ch_pointer);
    printf("ch的值为:%p\n", &ch);
return 0;
}

输出结果

5、间接运算符

我如果想给变量i赋值,内存地址为2000这个地方存储数值30,可以用两种做法:

  1. 变量i等于3;直接给变量i赋值。
  2. 内存为2000的这个地址里存储的数值为30;通过地址赋值。
    第二种方式如何用C语言表示呢?
  int i;
  int i_pointer;
  i_pointer = &i;
  i = 30;
  *i_pointer = 30;// *i_pointer 等价于 i;
  • 我们看到,在i_pointer的前面有一个星号“*”,这个星号叫间接运算符
    第二种方法的目的是,通过指针变量i_pointer找到i的地址,然后再将值放入地址中,其中 *i_pointer就是这个效果。
    当计算机看到i_pointer后,知道这是一个指针变量,存储的是一个内存地址,之后看到 i_pointer前面的星号 * ,会顺着 i_pointer
    这个指针变量中存储的地址(指针)到对应位置,然后将值30放入。
  • 从另一种角度看,int型变量i等价于指针变量 i_pointer.他俩存在等价关系。
  • *即i等价于 i_pointer

意气风发,漫卷疏狂
==学习是成长的阶梯,每一次的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中==。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!**
愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
我是意疏 下次见!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。