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.mzph.cn/news/164322.shtml

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

相关文章

计算方法 期末总结

思维导图 绪论 算法的性质: 有穷性、确切性、有输入输出、可行性 算法的描述方法: 自然语言、伪代码、流程图、N-S流程图 算法设计思想: 化大为小的缩减技术:二分法化难为易的校正技术:开方法化粗为精的松弛技术&a…

无需公网IP,使用内网穿透实现公网访问本地OpenWRT管理界面

文章目录 1.openWRT安装cpolar2.配置远程访问地址3.固定公网地址 简单几步实现在公网环境下远程访问openWRT web 管理界面,使用cpolar内网穿透创建安全隧道映射openWRT web 界面面板443端口,无需公网IP,无需设置路由器。 1.openWRT安装cpola…

SpringBoot使用ObjectMapper之Long和BigDemical类型的属性字符串处理,防止前端丢失数值精度

SpringBoot使用ObjectMapper之Long和BigDemical类型的属性字符串处理,防止前端丢失数值精度! 方式一:注解 使用注解 JsonFormat(shape JsonFormat.Shape.STRING),如下: import com.fasterxml.jackson.annotation.JsonFormat; …

在arm 64 环境下使用halcon算法

背景: halcon,机器视觉领域神一样得存在,在windows上,应用得特别多, 但是arm环境下使用得很少。那如何在arm下使用halcon呢。按照官方说明,arm下只提供了运行时环境,并且需要使用价值一万多人民…

设计高手的秘密武器:5款让平面作品更出彩的软件

平面设计是一种迷人而多样化的艺术形式,它结合了颜色、形状、排版和创造力,通过图像和文本传达信息。市场上有各种各样的平面设计软件,选择合适的设计软件是成为优秀设计师的重要一步。为了降低软件成本,大多数设计师会优先使用免…

编译原理之LL(1)语法分析实验(附完整C/C++代码与测试)

一、实验内容与要求 先从键盘读入要分析的文法,由程序自动构造FIRST、FOLLOW 集以及SELECT集合,判断是否为LL (1)文法。 分析文法为G[E]: (0)E→ TE’ (1)E’→ TE’ (2&#xff…

软件开发王者搭配:80%低代码+20%高代码

数字化领域从来不缺新概念,前两年市场大谈云原生、技术中台、业务中台等概念,企业更多聚焦在业务与IT架构的升级。而这两年,随着低代码、生成式AI的盛行,大家则开始挖掘数字化应用的低成本建设模式。 在过去,开发一套系…

Linux 是否被过誉了?

Linux 是否被过誉了? 有些人眼里,电脑这种东西就应该是华丽丽的桌面,手握鼠标戳戳按钮,键盘只为偶尔打打字,仿佛windows式的桌面形式才是理所应当,GUI才是理所应当,x86才是理所应当&#xff0c…

使用 NVProf 检测 CUDA kernel 的 bank conflict

使用 NVProf 检测 CUDA kernel 的 bank conflict NVProf 指令 使用 NVProf 可以对 bank conflict 进行检测: nvprof --events shared_ld_bank_conflict,shared_st_bank_conflict <app> [args...]其中: --events 选项指定的 shared_ld_bank_conflict,shared_st_bank_c…

python -opencv 中值滤波 ,均值滤波,高斯滤波实战

python -opencv 中值滤波 &#xff0c;均值滤波&#xff0c;高斯滤波实战 cv2.blur-均值滤波 cv2.medianBlur-中值滤波 cv2.GaussianBlur-高斯滤波 直接看代码吧&#xff0c;代码很简单&#xff1a; import copy import math import matplotlib.pyplot as plt import matp…

c++的更严格的类型转换要求

C有更严格的类型转换要求 C中对类型转换有严格的要求&#xff0c;需要的类型和给的类型不 一致时可能会编译报错 例如&#xff1a; C语言中 #include<stdio.h> #include<stdlib.h> //全局变量 //C语言中的函数的形参的类型可以不写&#xff0c;没有返回值可以返回&…

联发科正在改写全球高端手机芯片市场格局

全球高端手机芯片市场正在重塑。 11 月 21 日&#xff0c;联发科发布了新一代卓越 5G 生成式 AI 移动芯片天玑 8300。 这款定位于中端机档位的芯片&#xff0c;无论在技术架构还是在实际性能表现上&#xff0c;都实现了对前代旗舰芯片的赶超&#xff0c;彻底打破了业内长期存…

相机和滤镜应用程序Nevercenter CameraBag Photo mac软件特点说明

Nevercenter CameraBag Photo mac是一款相机和滤镜应用程序&#xff0c;它提供了一系列先进的滤镜、调整工具和预设&#xff0c;可以帮助用户快速地优化和编辑照片。 Nevercenter CameraBag Photo mac软件特点 1. 滤镜&#xff1a;Nevercenter CameraBag Photo提供了超过200种…

复费率电表和预付费电表有哪些区别?

随着科技的发展和能源管理的日益严格&#xff0c;电表技术也在不断更新换代。复费率电表和预付费电表作为两种主流的智能电表&#xff0c;各自具有独特的优势和应用场景。接下来&#xff0c;小编来为大家详细解析这两种电表的区别及其应用场景。 一、复费率电表 1.定义及工作原…

计算机精度导致各种误差,大数吃小数

如果 p ∗ p^* p∗是p的近似, ∣ p ∗ − p ∣ |p^*-p| ∣p∗−p∣是绝对误差, ∣ p ∗ − p ∣ / ∣ p ∣ |p^*-p|/|p| ∣p∗−p∣/∣p∣是相对误差 舍入误差,就是数据表示精度不足带来的误差 a0.1234564≈0.123456fl(a) b0.1234546≈0.123455fl(b) 在上面发生了舍入误差 f…

力扣labuladong一刷day15天K个一组翻转链表与回文链表

力扣labuladong一刷day15天K个一组翻转链表与回文链表 一、25. K 个一组翻转链表 题目链接&#xff1a;https://leetcode.cn/problems/reverse-nodes-in-k-group/ 思路&#xff1a;k个一组翻转链表&#xff0c;每k个翻转抽取出一个单独的方法reverse&#xff0c;翻转a到b&…

力扣刷题第二十九天--二叉树

前言 问问自己&#xff0c;刷题的效果真的达到了吗&#xff1f; 内容 一、翻转二叉树 226.翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 递归 func invertTree(root *TreeNode) *TreeNode {if rootnil{return root}…

Vue中的$nextTick的作用

在 Vue 中&#xff0c;当某些数据发生变化时&#xff0c;DOM 并不会立即更新。相反&#xff0c;Vue 会在下一个事件循环周期&#xff08;microtask&#xff09;中异步执行更新&#xff0c;这样可以避免频繁的 DOM 操作。然而&#xff0c;有时候我们需要在 DOM 更新后执行一些操…

2024-NeuDS-数据库题目集

一.判断题 1.在数据库中产生数据不一致的根本原因是冗余。T 解析&#xff1a;数据冗余是数据库中产生数据不一致的根本原因&#xff0c;因为当同一数据存储在多个位置时&#xff0c;如果其中一个位置的数据被修改&#xff0c;其他位置的数据就不一致了。因此&#xff0c;在数据…

11.docker的网络-docker0的理解及bridge网桥模式的介绍与实例

1.docker0的基本理解 安装完docker服务后&#xff0c;我们首先查看一下宿主机的网络配置 ifconfig我们可以看到&#xff0c;docker服务会默认在宿主机上创建一个虚拟网桥docker0&#xff0c;该网桥网络的名字称为docker0。它在内核层连通了其他物理或者虚拟网卡&#xff0c;这…