首页 > 其他分享 >C语言新手小白详细教程(7)指针和指针变量

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

时间:2024-08-14 09:54:11浏览次数:8  
标签:ch 变量 int C语言 地址 新手 pointer 指针

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

阅读指南:


开篇说明

本章节我们学习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


意气风发,漫卷疏狂
学习是成长的阶梯,每一次`的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中

如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!

愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
logo
我是意疏 下次见!

标签:ch,变量,int,C语言,地址,新手,pointer,指针
From: https://blog.csdn.net/2302_79751907/article/details/141070568

相关文章

  • C语言指针(3)
    野指针与空指针:野指针:概念:访问一个已经销毁或者访问受限的内存区域外的指针产生场景:·变量未初始化,通过指针访问该变量                       ·指针变量未初始化                           ·指......
  • 【C语言】内存管理函数详细讲解
    目录1.C语言内存管理函数详细讲解1.1`malloc`1.2`calloc`1.3`realloc`1.4`free`2.内存管理函数的深层理解2.1内存分配的原理2.2内存分配的性能考虑2.3动态调整内存块的大小2.4处理内存分配失败3.高级应用示例3.1内存池的实现3.2实现内存泄漏检测3.3内存......
  • C语言---数据类型和变量
    1.数据类型介绍  C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作。2.内置类型1.字符型char  ......
  • [Lang] 智能指针
    [Lang]智能指针智能指针能够有效简化内存管理,避免内存泄漏和悬挂指针等问题。1.std::unique_ptr独占所有权:一个std::unique_ptr对象拥有其管理的对象的唯一所有权。不允许复制:不能进行复制操作,尝试复制会导致编译错误。允许移动:可以将std::unique_ptr对象移动到另一个......
  • 长度最小的子数组 滑动窗口法(双指针) 解决
    给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl,numsl+1,...,numsr-1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例1:输入:target=7,nums=[2,3,1,2,4,3]......
  • C语言——指针(数组,函数)
    通过指针引用数组数组元素的指针数组指针:数组中的第一个元素的地址,也就是数组的首地址指针数组:用来存放数组元素地址的数组(存放数组元素指针的变量),称之为指针数组。eg://定义一个一维数组inta[]={1,4,9};//使用指针变量存储数组的第一个元素的首地址,也就是数组......
  • C语言入门零基础:9、字符串
    一、字符串定义    1、字符串和字符数组的区别:        字符数组存任意数组都可以,它可以以任何字符结尾;        字符串需要使用字符数组来存,但是结束必须要有一个'\0'字符;        只有字符串才能用双引号定义 ......
  • C语言实现斐波那契数列
    斐波那契数列(Fibonaccisequence)是一个经典的数学问题,在数学和计算机科学领域都有广泛的应用。斐波那契数列是以意大利数学家列昂纳多·斐波那契(LeonardodaFibonacci)的名字命名的,他通过兔子繁殖的例子引入了这一数列。斐波那契数列的每一项都是前两项的和,且从第三项开始,即1、......
  • 新手docker笔记
    拉取镜像时超时现象:failedtosolve:DeadlineExceeded:DeadlineExceeded:DeadlineExceeded:python:3.10.0-buster:...i/otimeout方案:创建/etc/docker/daemon.json文件,内容如下:{"registry-mirrors":["https://docker.m.daocloud.io","https://docker......
  • 嵌入式软件--C语言项目 客户信息管理系统
    考虑到目前C语言的学习是以为嵌入式做基础而进行的,项目所使用到的语法和结构都是嵌入式常用到的,这是较为特殊和针对性的项目,不与其他同名项目作比较。若有参考着谨慎借鉴。实现一个客户信息管理系统,功能包括添加客户、修改客户、删除客户、显示客户列表。1.需求说明(1)主菜单......