指针概念与定义指针
/* 指针的概念: 1.为了方便访问内存中的内容,给每一个内存单元,进行编号, 那么我们称这个编号为地址,也就是指针。 2.指针也是一种数据类型,指针变量有自己的内存, 里面存储的是地址,也就是那些编号。 四要素 1.指针本身的类型 例如:float* int* ... 2.指针指向的类型 例如:float int ... 3.指针本身的内存 4.指针指向的内存 运算符 *: 1.定义指针时,通过 * 符号,来表示定义的是一个指针,并且是指针自身的类型的组成部分 2.其他时候,表示解析引用(取内容:通过内存编号,读取内存中的内容) &:取(首)地址符,作用:取出(内存的)首地址 */ # include <stdio.h> int main() { // 定义指针(指针:pointer) float* p_name; // 指针本身的类型:float* 指针指向的类型:float int * p1; int *p2; // * 符号偏不偏移不影响其功能 return 0; }
指针的初始化与赋值
/* 知识储备: // 初识化:定义的同时,给值 int a = 0; // 赋值:先定义,再给值 int b; b = 0; */ # include <stdio.h> int main() { // 初始化 int num = 6; int val = 8; // 初始化 int* p1 = # // 对于指针变量p1,如果进行给值,必须给地址(内存编号) // 赋值 int* p2; p2 = &val; // 自行体会 int* p3 = p1; // 直接存入地址(不推荐使用,因为你不知道自己随便写的地址里面是什么!!) int* p4 = (int*)123456; // 将 整型123456 强转为 int*类型 的“地址” int* p5 = (int*)0XAB25; // 计算机中的内存地址通常用16进制数表示 // 直接使用地址:置空(即:"使用0地址,NULL:0X0") int* p6 = NULL; // 等价于 int* p6 = (int*)0X0; // 目的:为了给暂无指向的指针,提供指向,保证安全,将内存中的0地址特殊化 // 数组名就是数组的首地址 int arr[3] = { 1, 2, 3 }; // 数组类型:int [3] // 元素类型:int // arr 类型:int* int* p7 = arr; return 0; }
探究内存
/* 1.变量在内存中所占的字节数 所有的指针变量,不论类型,在内存中所占的字节数都是一样的,都是4个字节(或者8个字节) (8个字节是因为时代的发展,部分好的计算机性能得到提升,一般都是4个字节) 2.指针本身的内存,以及指针指向的内存 指针本身的内存:4个字节(指针变量只需要存储,所指向的变量的首地址) 指针指向的内存:看你所指向的类型,视情况而定 */ # include <stdio.h> int main() { double num = 12.0; double* p1 = # printf("%f \n", num); printf("%f \n", *p1); // 利用指针,取得 num 的值 return 0; }
指针的偏移
大端模式和小端模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构