前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )

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

作者头像
韩曙亮
发布2023-03-29 21:19:09
发布2023-03-29 21:19:09
46100
代码可运行
举报
运行总次数:0
代码可运行

文章目录

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


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

代码语言:javascript
代码运行次数:0
复制
char *p = NULL;

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

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

代码语言:javascript
代码运行次数:0
复制
#ifndef NULL
#ifdef __cplusplus
#ifndef _WIN64
#define NULL 0
#else
#define NULL 0LL
#endif  /* W64 */
#else
#define NULL ((void *)0)
#endif
#endif

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

错误代码示例 :

代码语言:javascript
代码运行次数:0
复制
#include <stdio.h>
#include <stdlib.h>

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

    return 0;
}

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

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


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

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

代码示例 :

代码语言:javascript
代码运行次数:0
复制
#include <stdio.h>
#include <stdlib.h>

int main()
{
    // 声明指针变量 , 并为其设置 NULL 初始值
    // NULL 就是 0
    char *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 等字面量 , 如

代码语言:javascript
代码运行次数:0
复制
int a = 0;

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、不允许向 NULL 地址写入数据
  • 二、不允许不断地改变指针指向
  • 三、字面量存放位置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档