欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )

发布时间:2025/6/17 编程问答 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 ) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 一、不允许向 NULL 地址写入数据
  • 二、不允许不断地改变指针指向
  • 三、字面量存放位置





一、不允许向 NULL 地址写入数据



声明指针变量 , 并为其 设置 NULL 初始值 , NULL 就是 0 ;

char *p = NULL;

注意 , 此时一定不能访问 p 指针变量指向的地址 , 0 地址是操作系统保护地址 , 读写该地址的数据 , 都会报错 ;


C/C++ 中的 NULL 的值为 0 ;

#ifndef NULL #ifdef __cplusplus #ifndef _WIN64 #define NULL 0 #else #define NULL 0LL #endif /* W64 */ #else #define NULL ((void *)0) #endif #endif

如果在声明指针后 , 向 NULL 地址写出数据 , 执行时直接报错 ;

错误代码示例 :

#include <stdio.h> #include <stdlib.h>int main() {// 声明指针变量 , 并为其设置 NULL 初始值// NULL 就是 0char *p = NULL;// 向 0 地址写出数据会报错strcpy(p, "123");// 打印 p 指针内容printf("%s\n", p);return 0; }

执行结果 : 上述代码执行时 , 没有任何响应 ;





二、不允许不断地改变指针指向



指针变量 声明后 , 不断修改 指针变量的值 , 就是 不断改变 指针变量 指向内存空间的位置 ;

上述操作会导致 多个指针变量 , 会 指向同一块内存空间 , 这种做法不会出错 , 但是 容易出现 BUG , 一旦出问题根本找不到原因 ;


代码示例 :

#include <stdio.h> #include <stdlib.h>int main() {// 声明指针变量 , 并为其设置 NULL 初始值// NULL 就是 0char *p = NULL;char *p2 = NULL;// 堆内存中申请 20 字节数据p2 = (char *)malloc(20);// 为内存赋值strcpy(p2, "1234567890");int i = 0;for(i = 0; i < 10; i++){// 借用 p 指针遍历 p2 指针指向的内存p = p2 + i;printf("%c\n", *p);}return 0; }

执行结果 :





三、字面量存放位置



在代码中 , 如果出现 0 , 1 等字面量 , 如

int a = 0;

上述 字面量 0 没有放在栈区 , 字面量 无法取地址 , 没有放在 栈区 和 堆区 ;

总结

以上是生活随笔为你收集整理的【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。