c语言之指针的学习

1.指针是什么

(指针是内存中一个最小单元的编号,也就是地址)

 

int main()
{int a=10;//当我们取出地址a的时候,取出的其实是a占4个字节中的第一个字节的地址int *pa=&a;//pa是一个指针变量,用于存放地址//pa在口头语上常说为指针//指针本质上就是地址,口语上的指针是指针变量,用于存放地址reruen 0;
)

 (平时口语常说的指针,通常指的是指针变量,是用来存放内存地址的变量)

关于指针的大小的解释

//假设在32位的机器上经行编码,这个机器产生的地址之可能是
00000000 00000000 00000000 00000000//32个bit位 
00000000 00000000 00000000 00000001
......
11111111 11111111 11111111 11111111
共有2^32次方个地址,每一个地址能管理一个字节
经过换算2^32字节==4GB
可知在32位的机器上,地址是32个0或1组成的二进制序列,那地址就得用
4个字节的空间来储存,所以在一个指针变量的的大小是4个字节
同理,在64位的机器上,一个指针变量的大小为8个字节 ---------------------------------------------------------
例子
#include<stdio.h>
int main()
{char *pc=0;int *ps=0;double *pi=0;short *pd=0;printf("%d\n",sizeof(pc));printf("%d\n",sizeof(ps));printf("%d\n",sizeof(pi));printf("%d\n",sizeof(pd));return 0;} 
8
8
8
8--------------------------------
Process exited after 0.07514 seconds with return value 0
请按任意键继续. . .

2.指针和指针类型

指针类型决了指针在被解引用的时候访问几个字节

如果是int*型的指针,解引用访问4个字节;如果是char*型的指针,解引用访问1个字节(指针的类型决定指针变量访问的字节数或者说+1时跳过的字节数)

ps:int类型与float类型虽然所占用的字节大小一样,但是不能通用,

如果给int型的指针变量赋值100.0,则该指针变量的值不一定为100.0

#include<stdio.h>
int main()
{int a=0x11223344;char *pc=(char*)&a;int *ps=&a;printf("pc=%p\n",pc);printf("pc+1=%p\n",pc+1);printf("ps=%p\n",ps);printf("ps+1=%p\n",ps+1);return 0;} 
pc=000000000062FE0C
pc+1=000000000062FE0D
ps=000000000062FE0C
ps+1=000000000062FE10--------------------------------
Process exited after 0.07891 seconds with return value 0
请按任意键继续. . .
//可知指针的类型决定了指针加一减一操作的时候,跳过几个字节

3.野指针

概念:(指针指向的位置时不可知的)

例如
int main()
{int *p;p没用初始化,意味着没有明确的方向*p=10;//非法访问内存,局部变量不进行初始化存放的时随机值return 0;
}
---------------------------------
指针的越界访问
int main()
{int arr[10]={0};int *p;int i=0;for(i=0;i<=10;i++){*p=i;p++;}return 0;} 
----------------------
例
#include<stdio.h>
int *test()
{int a=10;return &a;//a在函数调用后还给操作系统了,在本程序中
没有该空间使用权限,a在内存的空间还在
}
int main()
{int *p=test();//再调用*p,则*p成为也指针 printf("%d\n",*p);//虽然调用后没有使用权限了,但在a原来的地址没用被占用
之前,还能通过*p找到a的地址与值return 0;} 
------------------------
为了避免野指针的出现,对于暂时不知道赋值为什么的指针我们可以赋值为NULL
如何避免野指针

1.指针初始化

2.注意指针越界

3.避免返回局部变量的地址

4.指针指向NULL

5.检测指针的有效性

4指针运算

指针+-(加减)整数. 
指针-(减)指针.
指针的关系运算
#define N_VALUES 5
float values[N_VALUES];
float *v;
for(v=&values[0];vp<&values[N_VALUES];)//v小于&values[N_VALUES]的地址
{*v++=0;//该行代码可分为两步理解1.*v=0  2.v++
}//值得注意的是,虽然N_VALLUES的下标值有到5,但是内存中有接下来的内存,所以在里步存在野指针
-------------------------------------------------
int main()
{int arr[10]={0};int i=0;int *p=arr;int sz=sizeof(arr)/sizeof(arr[0]);for(i=0;i<10;i++){*p=1;// +
*(p+1)=1;p++;}	 return 0;} 

5.指针和数组

6.指针数组

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

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

相关文章

sqlserver 自定义函数汉字转拼音或首字母

作用&#xff1a; 将汉字生成为全拼音或者首字母&#xff0c;示例 执行自定义函数&#xff0c;将汉字转成对应的首字母 执行自定义函数&#xff0c;将汉字转成全拼音 自定义教程&#xff1a; 一&#xff0c;只取汉字的首字母 代码如下&#xff1a; 执行下面sql 就自定义函数了…

Java+Github+Jenkins部署

Java项目—Jenkins部署笔记 一&#xff0c;准备 一台服务器操作系统&#xff0c;示例为ubuntu 22.0.4 可运行lsb_release -a查看 二&#xff0c;安装 docker 更新软件包列表&#xff1a; sudo apt update安装必要的软件包&#xff0c;以便使用HTTPS通过APT下载软件包&#x…

leetcode 1326. Minimum Number of Taps to Open to Water a Garden

x轴上的花园范围为[0,n], 0~n这个n1个离散点上有水龙头&#xff0c;第 i 个水龙头能浇水的范围为[i-ranges[i], iranges[i]]. 求能浇整个花园的最小水龙头个数。 思路&#xff1a; 方法一&#xff1a; greedy 先把每个水龙头能浇的区间准备好&#xff0c; 用一个数组保存所有…

Glide分析和总结

1. Glide概述 Glide是一款图片处理的框架&#xff0c;从框架设计的角度出发&#xff0c;最基本要实现的就是 加载图片 和 展示。 它把一个图片请求封装成一个Request对象&#xff0c;里面有开启、暂停、关闭、清除网络请求、以及载体生命周期的监听等操作。然后通过RequestBu…

语言模型(language model)

文章目录 引言1. 什么是语言模型2. 语言模型的主要用途2.1 言模型-语音识别2.2 语言模型-手写识别2.3 语言模型-输入法 3. 语言模型的分类4. N-gram语言模型4.1 N-gram语言模型-平滑方法4.2 ngram代码4.3 语言模型的评价指标4.4 两类语言模型的对比 5. 神经网络语言模型6. 语言…

云计算环境中高性能计算的挑战与对策

文章目录 云计算中的高性能计算挑战1. 资源竞争&#xff1a;2. 网络延迟&#xff1a;3. 数据传输效率&#xff1a;4. 虚拟化开销&#xff1a;5. 节点异构性&#xff1a; 高性能计算在云计算环境中的对策1. 定制化虚拟机镜像&#xff1a;2. 弹性资源调整&#xff1a;3. 高效数据…

Java 包装类和Arrays类(详细解释)

目录 包装类 作用介绍 包装类的特有功能 Arrays类 Arrays.fill() Arrays.toString() Arrays.sort() 升序排序 降序排序 Arrays.equals() Arrays.copyOf() Arrays.binarySearch() 包装类 作用介绍 包装类其实就是8种基本数据类型对应的引用类型。 基本数据类型引用…

C盘扩容遇到的问题(BitLocker解密、)

120G的C盘不知不觉的就满了&#xff0c;忍了好久终于要动手了。 尽管电脑-管理--磁盘管理里可以进行磁盘大小调整&#xff0c;但由于各盘都在用&#xff0c;不能够连续调整&#xff0c;所以选用DiskGenius。 # DiskGenius调整分区大小遇到“您选择的分区不支持无损调整容量” …

网络基础之重中之重

目录 IP协议 ​编辑 基本概念&#xff1a; 协议头格式&#xff1a; ​编辑 网段划分 DHCP &#xff1a; CIDR&#xff1a; 特殊的IP地址&#xff1a; IP地址的数量限制&#xff1a; 私有IP和公网IP 路由 路由的过程&#xff1a; 数据链路层 认识以太网&#x…

C# Dapper 操作Oracle数据库

nuget安装内容 1.配置连接字符串 OracleConnectionString这个可用 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*","…

Citespace、vosviewer、R语言的文献计量学 、SCI

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

Docker技术--Docker简介和架构

1.Docker简介 (1).引入 我们之前学习了EXSI&#xff0c;对于虚拟化技术有所了解&#xff0c;但是我们发现类似于EXSI这样比较传统的虚拟化技术是存在着一定的缺陷:所占用的资源比较多&#xff0c;简单的说&#xff0c;就是你需要给每一个用户提供一个操作平台&#xff0c;这一个…

uniapp 布局(自定义导航栏加固定高度的主要内容)

不想让整体页面出现滚动条 页面大致分为三部分&#xff0c;导航栏、主题内容、tabbar&#xff0c;不想让整个页面出现滚动条&#xff0c;只想让主要内容滚动。 我这里是直接用了uni.getSystemInfoSync()&#xff0c;整体分为两部分&#xff0c;自定义头部和滚动内容&#xff…

微信小程序echart导出图片

echarts版本5.1.0 用到的echarts组件是uni插件市场的echart组件 <div style"overflow: hidden;"><dCanvas class"uni-ec-canvass" id"uni-ec-canvas" ref"canvas" canvas-id"mychart-gauge" :ec"ec"&g…

react17:生命周期函数

挂载时更新时 setState触发更新、父组件重新渲染时触发更新forceUpdate触发更新卸载时 react&#xff08;v17.0.2&#xff09;的生命周期图谱如下。 相较于16版本&#xff0c;17版本生命周期函数有如下变化&#xff1a; componentWillMount() componentWillUpdate() compone…

10.Redis 渐进式遍历

Redis 渐进式遍历 渐进式遍历scan 渐进式遍历 keys 命令一次性的把整个redis中所有的key都获取到&#xff0c;keys *但这个操作比较危险&#xff0c;可能会一下子得到太多的key,阻塞 redis 服务器。 通过渐进式遍历&#xff0c;就可以做到&#xff0c;既可以获取到所有的 key&…

认识SQL sever

目录 一、数据库的概念 1.1数据库的基本概念 1.2对数据库的了解 二、数据库的分类 2.1关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; 2.2非关系型数据库&#xff08;NoSQL&#xff09;&#xff1a; 2.3混合数据库&#xff1a; 2.4数据仓库&#xff1a; 2.5嵌…

计算机毕设 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要…

十、MySQL(DQL)条件查询

1、基础语法&#xff1a; select 字段列表 from 表名 where 条件列表; 2、实际操作&#xff1a; &#xff08;1&#xff09;初始化表格 &#xff08;2&#xff09;查询number大于444的员工 -- 查询number大于444的员工 select * from things where number>444; &#xff…

Qt/C++编写视频监控系统81-Onvif报警抓图和录像并回放

一、前言 视频监控系统中的图文警情模块&#xff0c;是通过Onvif协议的事件订阅拿到的&#xff0c;通过事件订阅后&#xff0c;设备的各种报警事件比如入侵报警/遮挡报警/越界报警/开关量报警等&#xff0c;触发后都会主动往订阅者发送&#xff0c;而且一般都是会发送两次&…