C语言——指针(一)

📝前言
这篇文章主要带大家初步认识一下指针,供大家理解参考。
主要归纳与讲解:
1,指针与指针变量
2,指针的基本使用(如何定义初始化引用

🎬个人简介:努力学习ing
📋个人专栏:C语言入门基础
🎀CSDN主页 愚润求学
🌄每日鸡汤:雄鹰不为暴风折翼,狼群不因长夜畏惧

文章目录

    • 一,指针与指针变量
      • 1,地址
      • 2,指针
      • 3,指针变量
    • 二,指针变量的基本使用
      • 1,指针变量的定义
      • 4,指针变量的大小
      • 2,指针变量的初始化
      • 3,指针变量的引用
      • 4,解引用操作符(“ * ”)

一,指针与指针变量

相信大家在学习C语言的时候常常听到别人提起地址指针,那究竟什么是地址?什么是指针?什么又是指针变量?

1,地址

●拿学校举例:
学校建成时就有很多宿舍,为了区分不同的宿舍,每个宿舍都有自己独有的门牌号,当学校来了新同学时,学校就会给同学分配宿舍,而宿舍的门牌号就代表了同学居住的地址

●C语言中的地址也是这样:
计算机的内存有很多储存单元,为了区分这些储存单元,计算机的操作系统就给每个储存单元都分配了自己唯一的编号,当我们在C语言中定义变量的时候,编译器就会给变量分配储存空间这个储存空间的编号就是存放变量的地址

2,指针

C语言把数据储存的起始地址称为指针
简单来说:“指针”不过是C语言中对地址的一个新描述,新名字。
其实就是:储存单元的编号 == 地址 == 指针

3,指针变量

指针变量就是一种用来存放指针的变量
就像存放数字的变量我们称为整型变量,那么存放指针的变量,我们就成为指针变量
例如:

int a = 1;      //我们把1赋值给变量a, a是整型变量
int* ptr = &a;  //我们把a的地址赋值给ptr, ptr是指针变量

二,指针变量的基本使用

1,指针变量的定义

定义格式:

int   *p1;    //定义了指向整型的指针变量,指针变量的类型是:int*
float *p2;  //定义了指向浮点型的指针变量,指针变量的类型是:float*
char  *p3;  //定义了指向字符型的指针变量,指针变量的类型是:char*

这里的“*” 是一个标识符,其含义是:代表了变量的类型是指针类型
这的 int/float/char 指的是指针所指向的数据的类型
指针变量也有不同的类型:把指针名字去掉,就是指针变量对应的类型。

我们如何理解指针变量的类型呢?
因为不同类型的变量所占用的内存的空间大小不同,因此指针变量前面的数据类型表示:保存的地址是对应数据类型的变量的指针

从语法上看,我们只须把指针声明语句中的指针名字名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。

例如:
int *p1; //指p1存放的是一个存放整型数的起始地址。
float *p2; //指p2存放的是一个存放浮点数的起始地址。
char *p3; //指p3存放的是一个存放字符型数据的起始地址。
如图:
图解

4,指针变量的大小

我们都知道变量类型的大小与放什么内容有关
比如:
int类型放的是数字,大小是4字节。
char类型放的是字符,大小是1个字节。
那么指针变量的大小也就取决于放一个地址需要多大的空间
计算机决定的:
在32位机器上,存放一个地址要32个bit位,那么,在**32位机器上,一个地址的大小就是4个字节,指针变量的大小也就是4个字节
在64位机器上,存放一个地址要64个bit位,那么,在
64位机器**上,一个地址的大小就是8个字节,指针变量的大小也就是8个字节

2,指针变量的初始化

指针变量可以在声明时或者在赋值语句中初始化。可以被初始化为0,NULL或者普通变量的地址。
NULL的指针不指向任何数据,也被称为“空指针”,表示数值0。
初始化如下:

int m = 3;
int *p1 = &m; //用普通整型变量m的指针初始化
double *p2 = 0; //p2指针变量不指向任何浮点数
int *p3 = NULL; //p3指针变量不指向任何整型数

当我们不初始化指针变量时,指针变量的值是随机的。
●注意:
1,尽可能使指针初始化,以防止指针指向一个未知的或者未被初始化的内存空间,变成野指针。
2,除了0以外,不能用其他具体的数字直接赋值给指针变量。

3,指针变量的引用

指针变量和其他变量相似,都可以进行赋值取值操作。
例如:

int m = 3;
double f = 4.5;
char ch = 'a';
//主要说明一下下面几句代码
int *p1 = &m;
double *p2 = &f;
char *p3 = &ch
int *p = p1

p1=&m 表示:将m的地址赋值给p1,此时p1就指向m
②p2=&f 表示:将f的地址赋值给p2,此时p2指向f。
③p3=&ch 与前两句同理,即p3指向ch。
p=p1 表示:将变量p1中的指针赋值到p变量中,此时p也指向了m储存单元
如图:
过程图解

4,解引用操作符(“ * ”)

作用是:取出指针变量所指向的内存单元中的值
下面我们在代码中理解,如:
(1)

int a = 100;
int* pa = &a;
*pa = 0;

*pa=0的作用是:把a的值改成了0,在这里(*pa)的意思是通过pa中存放的地址,找到指向的空间 (其实就是a)
(2)

int p,m;
scanf("%d",&m);
p = &m;
printf("%d %d\n",m, *p);
printf("%x",p);

程序的输出结果:
输入:3
输出:3 3 //这里打印的是 m 和(p)的值
22ff40 // 这里打印出的是 p中的指针,不同的计算机可能值不同
不难发现,m 与
p的结果是相同的,即 * 的作用就是:通过p中存放的m的地址,找到m。
————————————————————————————————

🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!最后,☺祝愿大家天天开心!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/211704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIP --- HCIA(部分汇总)--- 点对点网络

抽象语言 --- 电信号 抽象语言 --- 编码 编码 --- 二进制 二进制 --- 电信号 处理电信号 OSI/RM ---- 开放式系统互联参考模型 --- 1979 --- ISO --- 国际标准化组织 核心思想 --- 分层 应用层 --- 提供各种应用程序,抽象语言转换成编码,人机交互…

机器学习实战-第2章 k-近邻算法

KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法。 一句话总结: 近朱者赤近墨者黑! k 近邻算法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类。k 近邻算法假设给定一个训练数…

爱上C语言:scanf、gets以及getchar输入字符串你真的懂了吗

🚀 作者:阿辉不一般 🚀 你说呢:不服输的你,他们拿什么赢 🚀 专栏:爱上C语言 🚀作图工具:draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞…

【C++初阶】STL详解(七)Stack与Queue的模拟实现

本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…

【Python】批量将PDG合成PDF,以及根据SS号重命名秒传的文件

目录 说明批量zip2pdf批量zip2pdf下载SS号重命名源代码SS号重命名源代码下载附录,水文年鉴 说明 1、zip2pdf是一个开源软件,支持自动化解压压缩包成PDG,PDG合成PDF,笔者在其基础上做了部分修改,支持批量转换。 2、秒…

Word中如何实现 图片 | 表格 自动编号与文中引用编号对应

当我们在进行大篇幅word文档的编写时,为了节约修改文章中图片或表格所花费的大量时间,可以将图片自动编号,且让文中引用的顺序跟着图片顺序的变化而变化,具体操作如下: 1. 将鼠标定位在图片或者表格欲加编号的下方或上…

(二)C语言之变量与算数运算表达式概述

C语言之变量与算数运算表达式概述 一、华氏温度与摄氏温度对照二、代码概述三、练习 一、华氏温度与摄氏温度对照 #include <stdio.h>/*当华氏温度为 0,20,40,...300时&#xff0c;打印出华氏温度与摄氏温度对照表华氏温度与摄氏温度 C(5/9)(̧F-32) 其中C表示摄氏温度&…

latex通过bib添加参考文献作者名字有特殊符号如字母上有两点乱码解决办法

一、背景 在使用latex写英文论文时&#xff0c;一般是通过bib的方式添加参考文献。但有的参考文献作者是法国人或其他国家的&#xff0c;名字会有特殊符号&#xff0c;如某个字母上有两个点&#xff0c;或者声调符号等等&#xff0c;如下图所示&#xff1a; 如果不进行特殊操作…

计算机组成原理2

1.浮点数 2.IEEE 754 3.存储器的性能指标 4.存储器的层次化结构 主存类似手机运行内存8g &#xff0c;辅存类似手机内存128g.... 辅存必须先通过主存才能被cpu接收&#xff0c;就例如微信打开那个月亮小人界面两三秒就是主存在读取辅存的程序然后被cpu接收运行。 5.主存储…

Springboot集成swagger之knife4j

knife4j的最终效果&#xff1a; 支持直观的入参介绍、在线调试及离线各种API文档下载。 1 引入pom <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</ver…

【CCF-PTA】第03届Scratch第05题 -- 统计出现次数最多的字

统计出现次数最多的字 【题目描述】 我国自古流传下来不少脍炙人口的诗歌&#xff0c;各具特色&#xff0c;别具一格。有些诗只用寥寥几个字&#xff0c;就能描绘出生动的意境。 请找出以下诗篇中出现次数最多的字&#xff0c;如果有多个字出现次数相同&#xff0c;则答案为…

后渗透持久性-– 服务控制管理器

执行以下命令将快速检索服务控制管理器实用程序的 SDDL 权限。 sc sdshow scmanager服务控制管理器 – 安全描述符 PowerShell 还可用于枚举所有用户组的 SDDL 权限并将其转换为可读格式。 $SD Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Schedule\S…