【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )
生活随笔
收集整理的這篇文章主要介紹了
【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 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】指针数据类型 ( 野指针 |
- 下一篇: 【C 语言】指针间接赋值 ( 直接修改