【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )
文章目錄
- 一、判定指針合法性
- 二、數組越界
- 三、不斷修改指針變量值
- 四、函數中將棧內存數組返回
- 五、函數間接賦值形參操作
- 六、指針取值與自增操作
一、判定指針合法性
判定指針合法性時 , 必須進行如下判斷 , 判斷的是 指針指向的地址 是否為 NULL , 即 是否為 0 地址 ;
int get_value(char *key_value, char *key, char *value, int *value_len) {// 任何函數調用前 , 先判定函數形參正確性if(key_value == NULL || key == NULL || value == NULL || value_len == NULL){printf("key_value == NULL || key == NULL || value == NULL || value_len == NULL\n");return -1;} }不能判斷 指針指向的內容是否為 0 , 下面的示例是錯誤的 :
// 錯誤示例 int get_value(char *key_value) {// 錯誤的判定示例if(*key_value != '\0'){return -1;} }C 語言中的 指針 , 內存 等原理必須知道 , 不知道原理 , 就不會調用指針 ;
Java 語言中都會調用 , 即使 不懂 其中的內存 , 引用 相關的內存 原理 ;
二、數組越界
定義數組變量后 , 為其賦值時 , 賦值的內容 超出了數組的大小 ;
錯誤示例 : "abc" 字符串需要 444 字節內存 , 后面第 444 個字節是 \0 字符 ;
// 錯誤示例 char str[3] = "abc";三、不斷修改指針變量值
凡是涉及到修改 指針 變量值時 , 不要直接修改 原來的 指針變量 指向 ;
推薦 創建新的 臨時局部指針變量 , 接收該 指針 , 需要修改指針時 , 修改 該 臨時局部指針變量 ;
四、函數中將棧內存數組返回
如果在函數中 , 需要 創建一塊內存空間 , 返回給調用者 ;
這塊在 函數中 創建的內存 , 不能是數組 , 必須使用 malloc 函數 , 在 堆內存 中創建一塊內存空間 ;
在 函數內 創建的數組 存儲在 棧內存中 , 棧內存的數據 , 在函數結束后 , 其被系統自動回收 , 該內存可能被寫入其它數據 ;
五、函數間接賦值形參操作
在函數中 , 如果需要通過 函數的 形參指針變量 通過 間接賦值 返回相關結果 , 這個指針使用時要慎重 ;
建議 創建一個 臨時局部指針變量 , 接收該 形參指針 , 需要修改 指針 時 , 修改 臨時局部指針變量 ;
六、指針取值與自增操作
對于指針 * 和 ++ 同時操作時 , 如 :
*p++;特別注意 , 后綴 ++ 操作優先級高 , 先執行 *p 操作 , 然后地址 ++ ;
上述語句執行后 , 指針指向的地址就改變了 ;
對于不確定的操作 , 建議使用 () 設置操作優先級 ;
將 指針 指向的地址 中存儲的 值 自增 : 先取出值 , 然后自增 ;
(*p)++ ;先將地址自增 , 然后再取值 :
*(p++); 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】C 项目开发代码规范 ( 形
- 下一篇: 【错误记录】Java 中 ArrayLi