首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C 語言基礎教程(二):變數賦值完整指南——標量、陣列、指標與字串處理

     編輯:C 語言基礎

賦值:給已宣告變數存入特定值

賦值運算子 = 右結合,運算式值為左運算元賦值後的值。支援鏈式賦值 a = b = c = 0;。

1. 標量賦值

整數/浮點數


int a, m;
float n;
a = 100; m = 20;
n = a * m * 0.1f;   /* 隱性轉型:int→float */

字元型三種賦值方式


char c0, c1, c2;
c0 = 'b';           /* 字元常數 */
c1 = 50;            /* ASCII 碼值 (十進位) */
c2 = '\x0D';        /* 十六進位逸出序列 (CR) */

指標賦值:區分「指標本身」與「指向物件」


int *pi;
char *ps;

pi = (int *)malloc(sizeof(int));  /* 配置空間,取得位址 */
*pi = 100;                        /* 透過指標寫入物件 */

ps = "Good";                      /* 指標指向字串常值 */
/* *ps = 'B';  錯誤:字串常值不可修改 */

2. 陣列賦值

數值陣列:逐元素賦值


int m[2][2];
float f[3];
m[0][0] = 0; m[0][1] = 17; m[1][0] = 21;
f[0] = 109.5f; f[1] = -8.29f; f[2] = 0.7f;

字串陣列:必須用函數複製


char s[30];
strcpy(s, "Good News!");  /* 正確:逐字元複製含 \0 */

/* 錯誤寫法 */
char s2[30];
s2 = "Bad";  /* 編譯錯誤:陣列名非左值,不可整體賦值 */

長字串分行:相鄰字串常值自動串接


strcpy(s, "The writer would like to thank you for"
            "your interest in his book. He hopes you"
            "can get some helps from the book.");

指標陣列賦值


char *f[2];
int *a[2];

f[0] = "thank you";
f[1] = "Good Morning";

*a[0] = 1;   /* a[0] 必須先指向有效 int */
*a[1] = -11;

3. 指標與動態記憶體:正確用法

未初始化指標 = 隨機位址,解參考 = UB (可能破壞系統)。

單一物件


#include 
int *pi = malloc(sizeof(int));
*pi = 420;

char *ps = malloc(20);
strcpy(ps, "Good, Answer!");

多個連續物件 (模擬陣列)


#include    /* Turbo C 舊式標頭,現代用  */
int *pa = malloc(3 * sizeof(int));
*pa = 1234;
*(pa + 1) = 4567;   /* 等價 pa[1] */
*(pa + 2) = 234;    /* 等價 pa[2] */

指標算術核心法則

pa + i 位址遞增 i * sizeof(*pa) 位元組,非單純位元組位移。
上例 sizeof(int)=2 (16-bit 環境) → pa+1 相隔 2 bytes。

常見錯誤與修正

錯誤代碼問題修正
char *p; *p = 'A';野指標char *p = malloc(N); 或 char buf[N]; p = buf;
char s[10]; s = "Hi";陣列名非左值strcpy(s, "Hi"); 或 snprintf(s, sizeof s, "Hi");
char *p = "Hi"; p[0] = 'B';修改字串常值 (UB)char p[] = "Hi"; p[0] = 'B'; 或 strcpy(buf, "Hi");
free(p); *p = 0;使用已釋放記憶體free(p); p = NULL;

現代 C 實務建議

  • 優先使用標準庫容器:C++ std::vector/string;C 專案可封裝簡易動態陣列結構體。
  • 配配對:每個 malloc 對應一個 free,釋放後指標置 NULL。
  • 字串操作用 snprintf/strncpy_s:避免緩衝區溢位。
  • 指標加 const 表達意圖:const char *p (指向常值)、char *const p (常值指標)、const char *const p (雙重常值)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved