C 语言指针数据类型 ( 指针类型变量 与 指针指向的内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言指针数据类型 ( 指针类型变量 与 指针指向的内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )相关的知识,希望对你有一定的参考价值。
一、指针类型变量 与 指针指向的内存块 概念区别
指针类型变量 与 指针指向的内存块 概念区别 :
给定一个指针类型变量 :
// 定义一个普通整型变量
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
4
4 字节 ;
3、内存赋值
** 给指针指向的内存赋值 😗* 给上述指针变量 p
指向的内存 进行赋值操作 , 如 *p = 0x7F451D12
, 不会改变指针变量 p
的值 , 只会改变指针变量 p
原来指向的 内存块 中存储的值 ;
4、内存取值
指针指向的内存赋值与取值 :
- 给内存赋值 :
*p
如果在 等号=
左边 , 则表示给 指针 指向的 内存 赋值 ; - 从内存取值 :
*p
如果在 等号=
右边 , 则表示从 指针 指向的 内存 取值 ;
5、内存修改注意事项
修改内存注意事项 : 给指针赋值时 , 要 确保指针指向的 内存 可以修改 , 全局数据区 中的 常量区 的值 不能修改 , 代码区 中的值不能修改 , 堆区 和 栈区 中的值 , 即使能修改 , 也要确保指针是正确的 ;
最容易出错的情况是 , 指针指向 字符串常量 , 强行修改该指针指向的内存 , 会导致出错 ;
下面的代码中 , 就会出现问题 ;
char *p = "abc";
*p = "123";
以上是关于C 语言指针数据类型 ( 指针类型变量 与 指针指向的内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )的主要内容,如果未能解决你的问题,请参考以下文章
C 语言指针数据类型 ( 野指针 | 避免野指针推荐方案 )