C C 筆記(C語言重要問題,指標與陣列篇)

2021-07-15 05:02:13 字數 1768 閱讀 3556

指標的本質就是4位元組。

研究指標的步驟:

1. 別看星,看變數:如int ******p = &a;

2. 兩次取位址無意義,因為&a就是個數。如:&&a無意義,這麼寫就直接報錯了

指標宣告與使用,星號(*)表示的含義不同。

3. 指標宣告時,*表示宣告的變數為指標

4. 指標使用時,*表示操作指標所指向的記憶體空間值。

指標使用時,*p相當於通過位址p找到一塊記憶體;然後操作記憶體

指標使用時,

*p放在等號左邊給記憶體賦值,放等號右邊從記憶體中獲取值。

if(p1!=null)

這麼寫,會執行兩次free(p1)_,容易down機。

因為free(p1)第一次之後,雖然空間被釋放,但p1的值沒有變指向乙個有值的地方,但是不能用的地方。這種亂指我們叫野指標。

建議這麼寫

if(p1!=null)

陣列名的本質就是指標。下面是指標與陣列推導關係:

a[i] --->a[0+i]---> *(a+i)

a[i][j]---> *(a[0]+j)--->*( *(a+i) + j)

i代表步長。

a+i 代表整個第i行位址

*(a+i)代表第i行首位址

下面是學習c語言學習中常見的交換位置的函式。。看看執行後會有什麼結果?(6個常見的寫法)

void exchange(char a,char b)

int main()

void exchange(char* a,char* b)

int main()

void exchange(char* a,char* b)

int main()

void exchange(char* a,char* b)

int main()

void exchange(char* a,char* b)

int main()

void exchange(char* a,char* b)

int main()

1. 陣列與字串類似。但不強硬以『\0』結尾,上一節推出來下面這幾個陣列間的重要公式:

a[i] --->a[0+i]---> *(a+i)

a[i][j]---> *(a[0]+j)--->*( *(a+i) + j)

a+i 代表整個第行位址

*(a+i)代表第i行首位址

void f(int a[3][5]) ----> void f(int (*b)[5])

2. 陣列應用場景

c語言中,陣列的應用場景很多。

1. 選單

char* ckey= ;

2. int main(int argc,char* argv,char ** env)

作業系統打造了環境。也就是說,上面的那些指標指向的記憶體內容都是來自作業系統。

3. 指標陣列自我結束能力

char* ckey= ;

for( int i = 0 ; ckey[i]!=null ; )

*****4. 指標可以使函式內外同時操縱同一片記憶體空間,間接賦值是指標存在的最大意義(陣列也可以)。

指標是c/c++的精華。

C C 筆記(C語言重要問題重講,資料篇)

筆記原在個人印象筆記,現在整理搬運。1.陣列的坑 int a printf a is d,a is d,a 1 is d,a 1 is d n a,a,a 1,a 1 這裡a 與 a值是一樣的,都是4127200 a 代表陣列的首元素位址 a 代表整個陣列的位址 2.typedef的使用 這種用法c...

C C 筆記(C語言重要問題,結構體篇)

為什麼要寫結構體?因為用c 較多。class用多了,結構體就忘了。回頭一看,結構體原來還有這麼多坑。struct teacher 要使用struct teacher,可以像下面這麼搞,這是最常見用法。typedef struct teacher teacher teacher t 這些使用方式不好,...

C語言筆記 指標 指標與陣列

和 可以將指標向前或向後移動 n 個位元組,n 取決於指標的型別在此計算機中占用的位元組數,使用的方法和普通變數一樣。兩個指標相減則可以得到兩指標間的距離,這種運算只有在兩個指標指向同乙個陣列中的元素時候有意義,可以計算出兩個指標指向的元素之間相隔多少個元素 指標也可以使用 等運算子進行比較,但也是...