首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言二級指針/指針數組分配內存:name[i] = (char*)malloc(4*sizeof(char)) 解析

     編輯:程式設計疑難解答

代碼含義


name[i] = (char*)malloc(4 * sizeof(char));

`name` 是 **`char**` (二級指針) 或 **`char* name[]` (指針數組)**。該語句為第 `i` 個指針元素分配 4 字節內存,可存放 3 字符 + `\0` 的短字符串。

完整示例


#include 
#include 
#include 

int main() {
    char *name[2]; // 指針數組,2 個 char*
    
    name[0] = (char*)malloc(4 * sizeof(char));
    strcpy(name[0], "asd");
    
    name[1] = (char*)malloc(4 * sizeof(char));
    strcpy(name[1], "ddd");
    
    printf("%s\n%s\n", name[0], name[1]);
    
    free(name[0]);
    free(name[1]);
    return 0;
}

關鍵點

  • `malloc` 返回 `void*`,C 隱式轉換為 `char*`,C++ 需顯式轉型 `(char*)malloc(...)`。
  • **必須 `free` 釋放**,否則內存洩漏。
  • 4 字節極小,實際用 `strlen(str)+1` 動態分配。
  • 現代 C++ 推薦 `std::vector` 完全避免手動內存管理。

圖解內存結構

name (棧上數組)          堆內存
+------+                 +------+
| name[0] | ──────────→  | 'a','s','d','\0' | (4 bytes)
+------+                 +------+
| name[1] | ──────────→  | 'd','d','d','\0' | (4 bytes)
+------+                 +------+
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved