首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言新手小白详细教程(7)指针和指针变量

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

作者头像
意疏
发布2024-11-25 15:17:24
发布2024-11-25 15:17:24
4420
举报
文章被收录于专栏:学习学习

开篇说明

本章节我们学习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、为指针变量赋值

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

代码语言:javascript
复制
#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语言表示呢?
代码语言:javascript
复制
  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

意气风发,漫卷疏狂 学习是成长的阶梯,每一次`的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中。 如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。 您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力! 愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开篇说明
    • 1、指针的定义
    • 2、申明指针变量
    • 3、取地址符 &
    • 4、为指针变量赋值
    • 5、间接运算符
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档