日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

發布時間:2025/6/17 编程问答 20 豆豆

文章目錄

  • 一、判定指針合法性
  • 二、數組越界
  • 三、不斷修改指針變量值
  • 四、函數中將棧內存數組返回
  • 五、函數間接賦值形參操作
  • 六、指針取值與自增操作





一、判定指針合法性



判定指針合法性時 , 必須進行如下判斷 , 判斷的是 指針指向的地址 是否為 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 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。