当前位置: 首页 > news >正文

我能“C”——初阶指针(上)

目录

1.什么是指针?

2. 指针和指针类型  

3.野指针

3.1野指针的成因

3.2 如何规避野指针


1.什么是指针?

指针理解的2个要点:
1. 指针是内存中一个最小单元的编号,也就是地址
2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量

总结:指针就是地址,口语中说的指针通常指的是指针变量

总结:
指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。
那这里的问题是:
  • 一个小的单元到底是多大?(1个字节)
  • 如何编址?
经过仔细的计算和权衡我们发现一个字节给一个对应的地址是比较合适的。 对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的时候产生高电平(高电压)和低电 平(低电压)就是(1或者0);那么32根地址线产生的地址就会是:
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000001
...
11111111 11111111 11111111 11111111
这里就有232次方个地址。
每个地址标识一个字节,那我们就可以给 (2^32Byte==2^32/1024KB == 2^32/1024/1024MB==2^32/1024/1024/1024GB == 4GB) 4G的空间进行编址。

这里我们就明白:
  • 32位的机器上,地址是320或者1组成二进制序列,那地址就得用4个字节的空间来存储,所以
  • 一个指针变量的大小就应该是4个字节。
那如果在64位机器上,如果有64个地址线,那一个指针变量的大小是8个字节,才能存放一个地
址。
总结:
  • 指针变量是用来存放地址的,地址是唯一标示一个内存单元的。
  • 指针的大小在32位平台是4个字节,在64位平台是8个字节。

2. 指针和指针类型  

 不管是什么类型的指针,大小都是4个字节(x86环境)。但是在x64环境下为8个字节。

这里我们在讨论一下:指针的类型
我们都知道,变量有不同的类型,整形,浮点型等。那指针有没有类型呢?
准确的说:有的。
第一个意义:
——>指针类型决定了在解引用指针的时候能访问几个字节
调试下看看:先用int*的类型

 刚开始是44 33 22 11再按F10调试:

 结果都变成00 00 00 00

现在用char类型试试:

 刚开始是44 33 22 11(这里int a 和char*不同类型会小报个警告,先不管他)

再继续调试:

结果变成了00 33 22 11和刚刚的int类型不一样这就是区别。 

当是int的时候直接改了4个字节,当时char的时候只改了1个字节

所以:指针类型决定了在解引用指针的时候能访问几个字节

 第二个意义:

——>指针类型决定了,指针进行+1 、 -1的时候,一步走多远

比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。

 为什么会这样?因为pa认为它指向的是一个整型,所以当给pa加上1的时候就是说我访问完了这个整型就要跳到下一个整型,所以就跳了一个整型

但是对于char来说加上1就是跳过一个字符就是一个字节嘛,所以加了个1。

等价图:

所以:指针类型决定了,指针进行+1 、 -1的时候,一步走多远

总结:

指针的类型决定了,对指针解引用的时候有多大的权限。(能操作几个字节)

问:学这些有什么用??

现在放了10个0 ,现在我想把它们初始化到1—10

 用指针依次访问元素,我当我对它解引用操作的时候访问正好一个整型,访问下一个必须要跳一步,我对它解引用的时候想访问4个字节,所以用整型指针是最合适的。

 *p解引用操作一次访问4个字节(一个整型元素)  p++ 加1操作   |    跳过一个整型,所以这里只有int可以胜任  

要是改成char:

 

 3.野指针

概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

3.1野指针的成因

1.指针未初始化 

 这里的p没有初始化就随机选了个地址,就会造成非法访问。就比如说你大晚上很困,你回不了家了就随便去陌生人的家里倒头就睡是不是私闯民宅?

2.指针越界访问 

 如图前10个指针还是正常的,但是这里的循环是到i=12,明显就越界了,越界的那一部分就变成了野指针。

 3.指针指向的空间释放(略)

卖关子,放到动态内存开辟的时候再讲。

3.2 如何规避野指针

1.指针初始化

2.小心指针越界

3.指针指向空间释放,及时置NULL

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

5.指针使用之前检查有效性

#include <stdio.h>
int main()
{int *p = NULL;
//一个指针不知道指向哪里的时候,暂时可以初始化为NULL;//....int a = 10;p = &a;if(p != NULL){*p = 20;}return 0;
}

相关文章:

我能“C”——初阶指针(上)

目录 1.什么是指针&#xff1f; 2. 指针和指针类型 3.野指针 3.1野指针的成因 3.2 如何规避野指针 1.什么是指针&#xff1f; 指针理解的2个要点&#xff1a; 1. 指针是内存中一个最小单元的编号&#xff0c;也就是地址 2. 平时口语中说的指针&#xff0c;通常指的是指针…...

Android高级工程师工资为何让人艳羡不已

很多人都想有一个月入过万的梦想&#xff0c;为了实现这个梦想&#xff0c;很多人都付出了一定的努力&#xff0c;但除了付出&#xff0c;选择一个好的行业的也是非常重要的&#xff0c;就眼下而言&#xff0c;最为多金的职业莫过于Android高级工程师&#xff0c;为什么Android…...

什么猫猫最受欢迎?Python采集猫咪交易数据

前言 在日常生活中&#xff0c;我们看到可爱的猫咪表情包&#xff0c;总是会忍不住收藏 认识的一些朋友也养了猫&#xff0c;比如橘猫、英短、加菲猫之类的 看他们发朋友圈撸猫&#xff0c;老羡慕了&#xff0c;猫咪真的太可爱啦。 你是不是也动过养猫猫的小心思呢~反正我是动…...

使用Nextcloud搭建私人云盘,并内网穿透实现公网远程访问

文章目录摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名摘要 Nextcloud,它是ownCloud的一个分支,是一个文件…...

行业盛会|2023中国(东莞)国际测量控制及仪器仪表展览会

时间&#xff1a;2023年11月16-18日 地点&#xff1a;广东现代国际展览中心 ◆展会背景background&#xff1a; 众所周知,当今世界已经进入信息时代&#xff0c;信息技术成为推动科学技术高速发展的关键技术。…...

redis集群 服务器重启测试

redis集群 服务器重启测试1、集群规划&#xff1a;2台服务器 每台服务器运行3个redis实例2、重启2台服务器后redis实例没有自动重启最后一对主从节点比较 重启实例后和之前的主从分配3、再次重启2台服务器4、主从同步测试1、集群规划&#xff1a;2台服务器 每台服务器运行3个re…...

Diffusion的unet中用到的AttentionBlock详解

AttentionBlocktorch.splittorch中的permute的用法torch.transpose()view()torch.bmmsoftmax(x, dim-1)Diffusion的unet中用到的AttentionBlock详解class AttentionBlock(nn.Module):__doc__ r"""Applies QKV self-attention with a residual connection.Input…...

ElasticSearch索引文档写入和近实时搜索

一、基本概念 1.Segments In Lucene 众所周知&#xff0c;ElasticSearch存储的基本单元Shard&#xff0c;ES中一个Index可能分为多个Shard&#xff0c;事实上每个Shard都是一个Lucence的Index&#xff0c;并且每个Lucene Index由多个Segment组成&#xff0c;每个Segment事实上…...

【C语言蓝桥杯每日一题】——等差数列

【C语言蓝桥杯每日一题】——等差数列&#x1f60e;前言&#x1f64c;等差数列&#x1f64c;解题思路分析&#xff1a;&#x1f60d;解题源代码分享&#xff1a;&#x1f60d;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&…...

EM7电磁铁的技术参数

电磁铁可以通过更换电磁铁极头在一定范围内改善磁场的大小和磁场的均匀度 &#xff0c;并且可以通过调整极头间距改变磁场的大小。主要用于磁滞现象研究、磁化系数测量、霍尔效应研究、磁光实验、磁场退火、核磁共振、电子顺磁共振、生物学研究、磁性测量、磁性材料取向、磁性产…...

选择很重要,骑友,怎么挑选骑行装备?

骑行装备的重要性&#xff0c;已经不用多说了&#xff0c;大家也都知道。但是如何挑选&#xff0c;如何选择适合自己的骑行装备呢&#xff1f;今天我来和大家聊一聊这个问题。首先我们需要了解一个概念&#xff1a;骑行装备分为两大类&#xff1a;骑行服和骑行鞋。对于公路车来…...

【JUC面试题】Java并发编程面试题

Java并发编程 基础知识 1. 为什么要使用并发编程&#xff1f; 提升多核系统的CPU利用率一般来说一台主机上的会有多个CPU核心&#xff0c;我们可以创建多个线程&#xff0c;理论 上讲操作系统可以将多个线程分配给不同的CPU去执行&#xff0c;每个CPU执行一个线程&#xff0c…...

spark笔记

spark笔记 1. 概述 Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎&#xff1b;Spark提供内存计算&#xff0c;将计算结果直接放在内存中&#xff0c;减少了迭代计算的IO开销&#xff0c;有更高效的运算效率。 1.1 Spark核心模块 Spark Core&#xff1a;提供S…...

丢失了packet.dll原因和解决方法全面指南

packet.dll是Windows操作系统中的一个重要文件&#xff0c;它主要用于网络通信&#xff0c;如果丢失了这个文件&#xff0c;可能会导致网络连接问题。本文将探讨packet.dll文件丢失的原因&#xff0c;并提供相应的解决方法。 一、丢失packet.dll文件的原因 1. 病毒感染&#x…...

算法练习随记(三)

1.全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#x…...

基于Python 进行卫星图像多种指数分析

一、前言本文帮助读者更好地了解卫星数据以及使用 Python 探索和分析哨兵2卫星数号数据在Sundarbans地区的不同方法。二、Sundarbans研究区孙德尔本斯&#xff08;Sundarbans&#xff09;是恒河、雅鲁藏布江和梅克纳河在孟加拉湾汇合形成的三角洲中最大的红树林区之一。 孙德尔…...

(Week 15)综合复习(C++,字符串,数学)

文章目录T1 [Daimayuan]删删&#xff08;C&#xff0c;字符串&#xff09;输入格式输出格式样例输入样例输出数据规模解题思路T2 [Daimayuan]快快变大&#xff08;C&#xff0c;区间DP&#xff09;输入格式输出格式样例输入样例输出数据规模解题思路T3 [Daimayuan]饿饿 饭饭2&a…...

迪赛智慧数——柱状图(正负条形图):“光棍”排行榜TOP10省份

效果图 中国单身男女最多的省份是广东&#xff0c;广东的人口是全国最多的。人口多了&#xff0c;单身的人也会多&#xff0c;单身女性324万&#xff0c;男性498万。全国第二的省份是四川省&#xff0c;单身女性256万&#xff0c;单身男性296万。 数据源&#xff1a;静态数据…...

IDEA集成chatGTP让你编码如虎添翼

第一步,打开您的IDEA, 打开首选项(Preference) -> 插件(Plugin) 在插件市场搜索 chatGPT, 点击安装 安装完毕后会提示您重启IDE, 重启IDEA. 重启后您会发现窗口,右边条上 竖着挂着个chatGPT按钮了。 第二步、配置APIkey或accessToken(二选一,推荐accessToken无费用…...

Python3 os.close() 方法、Python3 File readline() 方法

Python3 os.close() 方法 概述 os.close() 方法用于关闭指定的文件描述符 fd。 语法 close()方法语法格式如下&#xff1a; os.close(fd);参数 fd -- 文件描述符。 返回值 该方法没有返回值。 实例 以下实例演示了 close() 方法的使用&#xff1a; #!/usr/bin/python3…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...