C语言-【指针一】-【什么是指针/指针类型】

news2024/11/26 12:22:49

    对于初学者来说,是不是一提到指针,大家就头疼啊,哈哈哈,当然,它都这么“吓人”了,那么在C语言中扮演的角色也很重要,当然,它也是C语言中的一个特色,如果我们把它拿下的话,那么,在后面写代码的过程中,可以使程序简洁,紧凑,高效,换而言之,指针算得上是C语言的灵魂了吧!

  既然这样,我们就完全吃透它,好不好~ 我们一个脚印一个脚印的走。

本篇文章文字内容较多,希望各位小伙伴么有耐心一点吆~

一.什么是指针?

如何理解呢:

简单来说,指针就是地址。(一直说指针就是地址,指针就是地址的,跟顺口溜一样,但却不了解它的真正含义。)

解释:

因为是通过地址能找到所需要的变量单元,也可以理解为,地址指向变量单元,比如说,你去住酒店,你房间的房间号是2509,如果你的朋友来找你玩,是不是根据你的房间号从而找到你啊,那么这个房间号就是房间的地址。换而言之也可以说,这个房间号指向了这个房间。内存亦是如此,将内存空间分割成一个个小的内存单元,并对它进行编号,这个编号就是地址,也称为"指针",意思是:通过它从而找到以它为地址的内存单元。看到这里的时候,你们是否对这个概念稍微清楚了一点呢?别着急,我们慢慢来.....

     理解:

(1)指针变量就是用来存放地址的变量。(存放在指针中的值都被当成地址处理);

(2)指针变量里面存放的就是地址,通过这个地址,就可以找到与其相对应的内存单元;(地址是唯一标示一个内存单元的);

(3)指针的大小:

          在x86环境(32位平台)是4个字节;

          在x64环境(64位平台)是8个字节;

那内存空间的管理又是怎样理解呢?

因为计算机关于内存管理涉及太多知识点,这里暂时先不详细介绍了,那么,我就用通俗易懂的大白话给大家解释啦:

把内存单元切割,每个内存单元为1字节

==> 给每个内存单元进行编号,我们就把内存单元的编号称为地址

==>指针就是地址,地址就是编号,也可理解为,指针就是内存单元的编号。

比如说这段代码: 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int m = 10;
	int* p = &m;

	return 0;
}

这里的m是整型变量,我们知道整型变量在C语言中占四个字节的内存空间;

这里的&m意思是通过&地址操作符,从而取出m的地址 ==》 &m就是m的地址;

int *p :  意思是初始化一个int*类型的指针p;

p = &m : 意思是将m的地址存入p指针,这时候p就表示为变量m的地址;

*p = m: 意思是指针p指向变量m,这时候*p就表示为变量m的数值。 

二.指针类型

从语法的角度来看的话,你把在指针声明语句中的指针的名字抛开,剩余的其他部分其实就是这个指针的类型。

在C语言中,指针类型就是数据类型,其实也单单就是给编译器看的,和其他类型都是一样的。

double a ;  int a ;  short a ;  float a......

这些是在前面所学到的,其实当给它们加上*时,它们就变成了新的类型。

double* a;  int *a;  short *a; float *a......

把这些类型就称为“指针类型”。

这里我们可以看到,指针的定义方式为:类型 + *。

     之所以对每个问题有问题时,往往是对它相关的概念理不清楚。接下来,我对这些小概念进行简单的解释,希望对大家有帮助哦

(一)指针的值

  什么是指针的值?指针的值就是指针本身存储的数值,这个值会被编译器当作一个地址,而不仅仅是一个数哦。对x86(32位)环境下来说, 因为32位程序中内存地址都是32位长,那么,所有类型的指针的值都是32位的整数。那么这里我们又要区分指针指向的类型指针指向的内存区域这两个概念了,记住它们俩可不一样啊!!!

(二)指针指向的内存区域

   指针指向的内存区是从该值的内存地址开始,长度为sizeof的一片内存区结束。所以,当某个指针的值为某某时,换言之,就是讲这个指针指向了以某某为首地址的一片内存区域;反过来,当说这个指针指向了某块内存区域时,其实就是指这个指针的值时这块内存的首地址。如果指针指向的内存没有初始化,那么内存区域中所保存的就是无用数据,和变量定义后不赋值就是无用值类似。

(三)指针指向的类型

当你通过指针来访问指针所指向的内存区时,指针所指向的类型就已经决定了,编译器就会把那片内存区域中的内容当作某某来看。

  所以在以后,我们遇到指针的时候,首先不应该是恐惧,而是应该考虑考虑,这个指针的类型,指针所指向的类型以及指针指向了哪里等问题,或许,当你把它们想清楚,你就在不知不觉中懂了,关于指针的这两个问题先分享到这里啦, 关于指针的其他问题,下期我们再见哦~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32CAM,点亮一个LED(Arduino平台)

前言 &#xff08;1&#xff09;在此&#xff0c;吐槽一下乐鑫的函数介绍&#xff0c;真的难找。恶心的一批。气死我了。 &#xff08;2&#xff09;接下来我将会介绍我是如何找到ESP32的Arduino平台的函数库的。你将会知道为啥我这么大的戾气。 &#xff08;3&#xff09;同时…

linux系统中输入与输出重定向

什么是输入输出重定向 我们在日常工作中最常用的是输出重定向&#xff0c;输出重定向就是将原本要打印到屏幕中的信息重定向到一个文件中。而输入重定向呢就是指把文件导入到命令中去&#xff0c;听起来是不是有点抽象啊&#xff0c;后面看博主举例说明就很好理由啦。 输出重定…

通讯录信息管理系统

系列文章 任务50 通讯录信息管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试插入按编号查找按姓名查找按城市查找更新排序浏览删除统计…

超好玩C++控制台打飞机小游戏,附源码

我终于决定还是把这个放出来。 视频在这&#xff1a;https://v.youku.com/v_show/id_XNDQxMTQwNDA3Mg.html 具体信息主界面上都有写。 按空格暂停&#xff0c;建议暂停后再升级属性。 记录最高分的文件进行了加密。 有boss&#xff08;上面视频2分47秒&#xff09;。 挺好…

轻松转换CAJ文件为PDF格式:免费工具和技巧

在处理中国知网&#xff08;CNKI&#xff09;数据库中的CAJ文件时&#xff0c;将其转换为更常用的PDF格式可以提供更广泛的共享和便捷的阅读体验。本文将介绍一种免费的工具和一些技巧&#xff0c;帮助您轻松地将CAJ文件转换为PDF格式。我们将使用记灵在线工具进行操作。 记灵…

推荐几本提高程序员职业素养的书

如果你是一名程序员&#xff0c;想要提长自己&#xff0c;那么这几本书推荐给你。 1、好代码 &#xff0c;坏代码 为了写出优良的代码&#xff0c;我们必须对手上的方案有合理的判断&#xff0c;并彻底想清楚特定方法的结果&#xff08;好的和坏的&#xff09;。为此&#xff…

F检验.医学统计实例详解

F检验是一种重要的医学统计方法&#xff0c;常用于检验两个或多个样本的方差是否相等&#xff0c;也被称为方差齐性检验。方差齐性检验是医学研究中的基本方法&#xff0c;因为许多重要的统计分析都要求样本方差相等&#xff0c;如方差分析、t检验等。以下将介绍F检验的基本原理…

简单上手Scrapy框架

创建一个Scrapy框架的爬虫程序 安装Scrapy库&#xff0c;直接通过pycharm搜索Scrapy进行安装即可 在终端执行 scrapy startproject 项目名 scrapy startproject Learn 示例 即可创建名为Learn的Scrapy程序&#xff0c;成功创建项目后&#xff0c;会已项目名称创建一个文件夹&…

FTP和SSH连接远程终端Ubuntu

安装好ubuntu后是默认没有ssh服务和ftp服务的&#xff0c;我们需要自己解决一下这个问题 SSH 更新软件列表和软件 sudo apt-get update sudo apt-get upgrade安装ssh sudo apt-get install ssh启动ssh服务 sudo /etc/init.d/ssh start修改ssh服务配置文件 sudo vim /etc/…

前端工程化:发布一个属于自己的规范 npm 包

初始化项目 首先在github创建一个仓库&#xff0c;协议选择MIT&#xff0c;gitignore选择Node&#xff0c;添加README.md描述文件。使用git clone将项目克隆到本地。cd 进入目录&#xff0c;使用vscode打开&#xff08;终端输入code . 命令即可&#xff09;。 然后创建一个合理…

CentOS-7 安装 MariaDB-10.8

一、安装之前删除已存在的 Mysql/MariaDB 1 查找存在的 MariaDB # 注意大小写 rpm -qa | grep MariaDB # rpm -qa 列出所有被安装的rpm package &#xff08;-qa:query all&#xff09; rpm -qa | grep mariadb # grep &#xff08;缩写来自Globally search a Regular Expre…

C++ 折叠参数包:悄然增强编程效率

前言 欢迎来到&#x1f496;小K&#x1f496;的&#x1f49e;C专栏&#x1f49e;&#xff0c;本节将为大家带来折叠参数包的详细讲解&#xff0c;折叠参数包为C模板编程提供了更加灵活和强大的工具&#xff0c;可以提高代码的简洁性和可读性&#xff0c;看完后希望对你有收获 文…

室内外融合定位UWB信标定位方案

大家好&#xff0c;我是北京华星智控公司小智&#xff0c;今天我给大家介绍室内外融合定位系统方案&#xff0c;该方案室外采用北斗卫星定位技术室内采用UWB定位技术从而实现室内外精确定位无缝切换&#xff0c;实现室内外的融合定位。 室内外融合定位系统&#xff0c; 该方案…

Binder相关问题

Binder相关问题 1、Binder是什么&#xff1f;2、Binder有什么优势&#xff1f;3、Binder如何做到一次拷贝的&#xff1f;4、MMAP的原理是什么&#xff1f;5、Binder机制是如何跨进程的&#xff1f;6、为什么Intent不能传递大数据7、AIDL生成Java类细节8、四大组件底层的通信机制…

波奇学Linux:yum和vim

Linux三种安装方式 源代码安装 用户下载->软件源码->源码编译->可执行程序 rpm安装&#xff1a;相当于去官网下载Linux安装包 可能存在依赖项不匹配问题。 yum安装包 用户yum下载->软件安装包->可执行程序 yum是软件包管理器&#xff0c;解决安装源&…

玩客云刷Armbian带docker详细教程(附所有软件)

文章目录 介绍一.准备工作1.硬件准备2.软件准备 二.开始折腾1.烧录系统固件2.刷入系统1.准备镜像2.刷入镜像3.刷入镜像到系统 三.功能介绍1.网页终端2.设备状态3.AriaNg4.qBittorrent5.微力同步6.filebrowser7.Portainer 四.拓展1.添加Alist1.介绍2.安装3.配置3.1查看密码3.2修…

chatgpt赋能Python-pythoncidere

PythonCider&#xff1a;提供最优质的 Python 编程知识 Python 是目前最受欢迎的编程语言之一&#xff0c;特别在数据科学和人工智能方面应用广泛。如果你是一名 Python 开发者或者正在学习 Python 编程&#xff0c;PythonCider 是一个你绝对不能错过的网站。 什么是 PythonC…

JavaScript实战训练小项目 WebAPI

JavaScript实战训练小项目 文章目录 JavaScript实战训练小项目 & WebAPI1. JS操作DOM树1.1 获得HTML控件/元素标签1.2 操纵控件1.2.1 获取属性值1.2.1 修改属性值 1.3 实现一个猜数字的功能 2. JQuery3. 简单计算器4. 聚合搜索5. 表白墙 JavaScript实战训练小项目 & We…

OpenLayers入门教程汇总目录

前言 本篇作为OpenLayers入门教程的目录&#xff0c;用于整理汇总专栏所有文章&#xff0c;方便查找。 入门 Gis开发入门&#xff0c;OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍vue项目集成并使用OpenLayers地图的两种方式 加…

记ABAC的落地实践

为什么使用ABAC 一般提到授权&#xff0c;我们就会想到角色&#xff08;role&#xff09;。什么样的用户拥有什么样的角色可以怎么操作什么样的资源&#xff0c;这是我们普遍使用的权限系统的模型。这里的角色实质上是包含了一组用户操作资源的规则集合。一旦角色被创建&#…