鹏哥C语言77---指针的定义和类型

server/2024/10/18 19:34:47/

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>

//---------------------------------------------------BIT - 6 - 指针-------------------------------------------------
1.指针是什么
2.指针和指针类型
3.野指针
4.指针运算
5.指针和数组
6.二级指针
7. 指针数组
//-------------------------------------------------------------------------------------------------1 指针是什么
1.指针是内存中一个最小单元的编号,也就是地址
2.平时口语中说的指针, 通常指的是指针变量, 是用来存放内存地址的变量
总结 : 指针就是地址, 。//指针变量:
我们可以通过& (取地址操作符)取出变量的内存 起始地址, 把地址可以存放到一个变量中, 这个变量就是指针变量

int main()
{int a = 10; // a 是整型变量,占用4个字节的内存空间int* pa = &a; // pa 是一个指针变量,用来存放地址的,pa 的类型是 int*//本质上,指针就是地址//口语中说的指针通常指的是指针变量,指针变量是用来存放地址的一个变量return 0;
}

一个内存单元是 1 字节,1字节byte = 8比特位bit

在32位的机器上, 地址是32个0或者1组成二进制序列, 那地址就得用4个字节的空间来存储, 所以一个指针变量的大小就应该是4个字节。
那如果在64位机器上, 如果有64个地址线, 那一个指针变量的大小是8个字节, 才能存放一个地址。

指针变量是用来存放地址的, 地址是唯一标示一块地址空间的。
指针的大小在(X86)32位平台是4个字节, 在(X64)64位平台是8个字节。

//----------------------------------------------------------------------------------------- 2 指针和指针类型

int main()
{char* pc = NULL;short* ps= NULL;int* pi= NULL;double* pd= NULL;//sizeof() 返回的值的类型是无符号整型 unsigned intprintf("%zu\n", sizeof(pc)); //8printf("%zu\n", sizeof(ps)); //8printf("%zu\n", sizeof(pi));  //8printf("%zu\n", sizeof(pd));//8return 0;
}

//----------------------------------------------------------------------------指针类型的意义 2.1

int main()
{int a = 0X11223344;int* pa = &a;*pa = 0;//---------------------------结论1----------------------------//指针类型决定了指针在被解引用的时候访问几个字节//如果是 int* 的指针,解引用访问四个字节//如果是 char* 的指针,解引用访问一个字节//推广到其他类型//如果是 double* 的指针,解引用访问八个字节return 0;
}

//100    10进制
//0x64  16进制
//110 0100  2进制
//144     8进制
//----------------------------------------------------------------------------指针类型的意义 2.2

int main()
{int a = 0X11223344;int* pa = &a;char* pc = &a;printf("pa=%p\n", pa);printf("pc=%p\n", pc);printf("pa+1=%p\n", pa + 1);printf("pc+1=%p\n", pc + 1);//pa        = 000000F88CAFF994//pa + 1 = 000000F88CAFF998//pc        = 000000F88CAFF994//pc + 1 = 000000F88CAFF995//pa pc 两个结果一样,因为都存放的都是 a的地址//pa+1(加了4个字节) pc+1 (加了1个字节)结果不一样//---------------------------结论2----------------------------//指针的类型决定了指针+-1时,跳过几个字节//决定了指针的步长//想让指针一次访问几个字节,用对应的指针类型return 0;
}
int main()
{int a = 0;int* pi = &a;  // pi 解引用访问4个字节,pi+1也跳过4个字节float* pf = &a; // pf 解引用访问4个字节,pf+1也跳过4个字节// int*  和 float* 可以通用?//不能*pi = 100;*pf = 100.0;//1120403456//100.000000printf("%d\n%f\n", *pi, *pf);//二者结果不同, int*  和 float* 对内存的解读方式有差异,不能混用    return 0;
}

//--------------------------------------------------------------------------------------------------------- 3 野指针
 


http://www.ppmy.cn/server/131643.html

相关文章

精益与数字化的融合:制造业的创新之路

回望过去&#xff0c;精益管理作为制造业的瑰宝&#xff0c;以其“消除浪费、持续改进、顾客至上”的核心理念&#xff0c;引领了无数企业走向成功。从丰田生产方式到全球范围内的广泛实践&#xff0c;精益管理不仅提升了生产效率&#xff0c;更重塑了企业的文化和价值观。它教…

界面控件DevExpress中文教程 - 如何拓展具有AI功能的文本编辑器(二)

NLP是人工智能的一个分支&#xff0c;它允许计算机与人类语言进行交互&#xff0c;这包括以有意义/有用的方式理解、解释、生成和回应文本(和语音)的能力。基于NLP的功能允许更好的数据分析、个性化体验、高效的沟通&#xff0c;并导致更明智的决策和提高效率。例如&#xff1a…

C#使用ITextSharp生成PDF文件实例详解

许多项目开发中需要生成PDF, 常规办法使用官方提供的Microsoft.Office.Interop.Worddll插件,但是这种方法需要完全安装OFFICE,另外版本不一致还会出现很多错误。一般不推荐使用。 下面介绍这种巧妙的用法,定能事半功倍。 本文使用ITextSharp完成功能。 首先,通过NuGet…

C++关于树的基础知识

首先区分概念 “度为m的树”指的是至少有一个结点的度是m&#xff0c;一定是非空树 “m叉树”指的是允许所有的结点都小于m&#xff0c;且可以是空树 常见考点&#xff1a; 度为m的树的第i层最多有个结点 &#xff08;对于m叉树也相同&#xff09; 第一层m的0次方 第二层m的…

JVM进阶调优系列(1)类加载器原理一文讲透

今天开始写JVM调优系列&#xff0c;并发编程系列也会继续穿插连载&#xff0c;让各位同学闲暇之余有更多阅读选择。 起笔写第一篇&#xff0c;并不好写。首先要构思整个系列的大概框架&#xff0c;一个好的框架一定是深度上由浅入深、逻辑上有严格顺序&#xff0c;读者订阅跟踪…

Python酷库之旅-第三方库Pandas(144)

目录 一、用法精讲 651、pandas.Timestamp.min属性 651-1、语法 651-2、参数 651-3、功能 651-4、返回值 651-5、说明 651-6、用法 651-6-1、数据准备 651-6-2、代码示例 651-6-3、结果输出 652、pandas.Timestamp.minute属性 652-1、语法 652-2、参数 652-3、功…

【HarmonyOS开发笔记 1】 -- 开发环境的搭建

DevEco Studio 的下载与安装 下载 下载路径&#xff1a; https://developer.huawei.com/consumer/cn/download/ 安装 解压后双击 deveco-studio-5.0.3.814.exe 指定安装目录&#xff0c;或者默认&#xff0c;然后下一步 一直“下一步”&#xff0c; 直到最后安装完成 新…

Unity中搜索不到XR Interaction Toolkit包解决方法

问题&#xff1a; 针对Unity版本2020.3在中PackageManager可能搜素不到XR Interaction Toolkit包 在Package Manager中未显示XR Interaction Toolkit包 解决方法&#xff1a; Package manager左上角&#xff0c;点加号&#xff0c;选择 Add package from git URL..&#xff0c;…