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

C程序設計語言精華筆記(二):運算符優先級、字符串、存儲類別與標準庫函數

     編輯:關於C語言

運算符優先級與結合性表

優先級運算符結合性說明
1() [] -> .左→右函數調用、下標、結構訪問
2++ -- + - ! ~ (type) * & sizeof右→左一元運算符
3* / %左→右乘除模
4+ -左→右加減
5<< >>左→右移位
6< <= > >=左→右關係
7== !=左→右相等
8&左→右按位與
9^左→右按位異或
10|左→右按位或
11&&左→右邏輯與
12||左→右邏輯或
13?:右→左條件
14= += -= *= /= %= &= ^= |= <<= >>=右→左賦值
15,左→右逗號

字符串與字符數組

  • 字符串常量本質是以 \0 結尾的字符數組,存儲在只讀區(修改屬 UB)。
  • char *s = "abc" 指向常量區;char s[] = "abc" 在棧上複製一份可修改副本。
  • strlen 不計 \0;sizeof 計 \0。
  • 函數形參 char s[] 與 char *s 等價。
  • scanf("%s", arr) 遇空白停止,不需 &;printf("%s", arr) 遇 \0 停止。

枚舉常量

enum boolean { NO, YES = 1 };
// 未指定值時從 0 遞增;指定值後續繼續遞增

C 程序內存佈局

高地址
|-----------|
|   棧      |  自動變量、函數幀、向下增長
|-----------|
|           |
|   ↑       |
|           |
|   ↓       |
|-----------|
|   堆      |  malloc/calloc 動態分配、向上增長
|-----------|
|  BSS 段   |  未初始化全局/靜態變量、內核清零
|-----------|
|  數據段   |  已初始化全局/靜態變量
|-----------|
|  正文段   |  代碼、只讀常量、只讀
|-----------|
低地址

四種存儲類別

類別關鍵字存儲期作用域鏈接默認值
自動auto塊進入→退出塊無不定
寄存器register塊塊無不定
外部extern程序全程文件外部0
靜態static程序全程塊/文件內部/外部0

static 詳解

  • 全局 static:限制作用域為本文件(內部鏈接),存儲位置不變。
  • 局部 static:存儲位置從棧移至靜態區,生命周期延至程序結束,作用域仍為局部,保持值跨調用。
  • 函數 static:內部鏈接,僅本文件可見。

const 限定符

  • const int *p / int const *p:指向常量的指針(底層 const),不可通過 p 修改值,p 可變。
  • int *const p:常量指針(頂層 const),p 不可變,可修改指向值。
  • const int *const p:雙重 const,指針與值均不可變。
  • 數組形參 const int a[] 實為 const int *a,函數內可修改指向但不可修改元素。

sizeof、register、位移、默認返回值

  • sizeof:編譯期運算符,操作數可為表達式或類型名(帶括號),返回 size_t。
  • register:建議編譯器放入寄存器,不可取地址(&),現代編譯器多忽略此提示。
  • 左移補 0;右移:無符號邏輯右移補 0,有符號算術/邏輯右移由實現定義(不可移植)。
  • 函數無返回類型聲明時默認 int(C89),C99 建議顯式聲明。

標準庫函數速查

頭文件分類常用函數
<string.h>字符串strcpy/strncpy, strcat/strncat, strcmp/strncmp, strlen, strchr, strrchr
<ctype.h>字符測試/轉換isalpha, isdigit, isspace, toupper, tolower
<math.h>數學sin, cos, sqrt, pow, log, exp, fabs
<stdlib.h>隨機/存儲rand/srand, malloc/calloc/free

隨機數:#define frand() ((double)rand() / (RAND_MAX + 1.0)) 生成 [0,1) 浮點數。
內存管理:malloc 不初始化,calloc 清零;釋放鏈表節點時需先保存 next 指針。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved