指針:
指針在本質上是一個變量;指針需要占用一定的記憶體空間;指針用于儲存記憶體位址的值
*号的意義:
在指針聲明時,*号表示所聲明的變量為指針;
在指針使用時,*号表示取指針所指向的記憶體空間中的值 ;
char *p <==> (char *)p //前面的資料類型是修飾指針指向的空間大小,在32位機器中,指針大小為4位元組
傳值調用與傳址調用:
指針是變量,是以可以聲明指針參數
當一個函數體内部需要改變實參的值,則需要使用指針參數
函數調用時實參值将複制到形參
指針适用于複雜資料類型作為參數的函數中
數組:
相同類型的變量的有序集合
數組的大小:數組在一片連續的記憶體空間中存儲元素,數組元素的個數可以顯示或隐式指定
Int a[5] = {1,2};
Int b[] = {1,2};
數組位址與數組名:
數組名代表數組首元素的位址(a);
數組的位址需要用取位址符&才能得到(&a);
數組首元素的位址值與數組的位址值相同
數組首元素的位址與數組的位址是兩個不同的概念
數組名的盲點:
數組名可以看做一個常量指針;
數組名“指向”的是記憶體中數組首元素的起始位置;
在表達式中數組名隻能作為右值使用下
下列場合中數組名不能看做常量指針:
數組名作為sizeof操作符的參數;數組名作為&運算符的參數
變量 | 含義 |
---|---|
a | a為數組首元素的位址;a + 1 <==>(unsigned int)a + sizeof(*a) |
&a | &a為整個數組的位址; &a + 1 <==>(unsigned int)(&a) + sizeof(*&a) |
數組與指針分析 :
數組的本質:
數組是一段連續的記憶體空間;
空間大小為sizeof(array_type)* array_size;
數組名可看做指向數組第一個元素的常量指針
指針的運算 :
數組的通路形式:
數組參數:
數組作為函數參數時,編譯器将其編譯成對應的指針;
一般情況下,當定義的函數中有數組參數時,需要定義另一個參數來标示數組的大小
void f(int a[]); ==>void f(int* a);
void f(int a[5]); ==>void f(int* a);
指針和數組的對比:
C語言中的字元串:
指針數組和數組指針分析:
定義數組類型:
main函數的參數:
main函數可以了解為作業系統調用的函數;在執行程式的時候可以向main函數傳遞參數
多元數組和多元指針:
指向指針的指針:
指針變量在記憶體中會占用一定的空間;可以定義指針來儲存指針變量的位址值