【C 语言】指针数据类型 ( 指针类型变量 与 指针指向的内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )

简介: 【C 语言】指针数据类型 ( 指针类型变量 与 指针指向的内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )

文章目录

一、指针类型变量 与 指针指向的内存块 概念区别

1、指针赋值

2、指针运算

3、内存赋值

4、内存取值

5、内存修改注意事项





一、指针类型变量 与 指针指向的内存块 概念区别


指针类型变量 与 指针指向的内存块 概念区别 :


给定一个指针类型变量 :


// 定义一个普通整型变量
int a = 888;
// 声明 指针类型变量
// 将整型变量地址赋值给指针类型变量
int *p = &a;


1、指针赋值


给指针赋值 : 给上述指针变量 p 赋值操作 , 如 p = 0x7F451D12 , 只改变指针变量 p 的值 , 没有改变指针变量 p 原来指向的 内存块 中存储的值 ;


char *p1 = (char *)malloc(100);
*p1 = (char *)malloc(100);


上述操作中 , 第二次赋值 , 指针变量改变了 ; 此时



2、指针运算


指针算术运算 : 对上述指针进行算术运算 ,


p + 1



p++


的计算结果是指针的地址值加上指针类型对应的字节大小值 , 如果是 int 类型的指针 , 则增加 4 44 字节 ;



3、内存赋值


** 给指针指向的内存赋值 😗* 给上述指针变量 p 指向的内存 进行赋值操作 , 如 *p = 0x7F451D12 , 不会改变指针变量 p 的值 , 只会改变指针变量 p 原来指向的 内存块 中存储的值 ;



4、内存取值


指针指向的内存赋值与取值 :


给内存赋值 : *p 如果在 等号 = 左边 , 则表示给 指针 指向的 内存 赋值 ;

从内存取值 : *p 如果在 等号 = 右边 , 则表示从 指针 指向的 内存 取值 ;


5、内存修改注意事项


修改内存注意事项 : 给指针赋值时 , 要 确保指针指向的 内存 可以修改 , 全局数据区 中的 常量区 的值 不能修改 , 代码区 中的值不能修改 , 堆区 和 栈区 中的值 , 即使能修改 , 也要确保指针是正确的 ;


最容易出错的情况是 , 指针指向 字符串常量 , 强行修改该指针指向的内存 , 会导致出错 ;


下面的代码中 , 就会出现问题 ;


char *p = "abc";
*p = "123";


目录
相关文章
|
1月前
|
存储 缓存 安全
阿里云服务器经济型、通用算力型、计算型、通用型、内存型实例区别及选择参考
阿里云服务器的实例规格有经济型、通用型、计算型、内存型、通用算力型、大数据型、本地SSD型、高主频型、突发型、共享型等不同种类的实例规格,在阿里云的活动中,主要以经济型、通用算力型、计算型、通用型、内存型实例为主,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,这会是因为不同实例规格的由于采用的处理器不同,底层架构也有所不同(例如X86 计算架构与Arm 计算架构),因此不同实例的云服务器其性能与适用场景是有所不同。本文为大家详细介绍阿里云的经济型、通用算力型、计算型、通用型和内存型实例的性能特点及适用场景,以供大家选择参考。
阿里云服务器经济型、通用算力型、计算型、通用型、内存型实例区别及选择参考
|
26天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
5天前
|
存储 缓存 NoSQL
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
13 0
|
1月前
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
2月前
|
存储 程序员 编译器
堆和栈内存的区别是什么
【8月更文挑战第23天】堆和栈内存的区别是什么
102 4
|
2月前
|
存储 NoSQL 程序员
C语言中的内存布局
C语言中的内存布局
38 0
|
4月前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
2月前
|
C语言
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
|
2月前
|
C语言
【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)
【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)
|
2月前
|
存储 编译器 C语言
【C初阶——指针3】鹏哥C语言系列文章,基本语法知识全面讲解——指针(3)
【C初阶——指针3】鹏哥C语言系列文章,基本语法知识全面讲解——指针(3)