一、什么是指針:
指針的概念:1.指針就是個變量,用來存放地址,地址唯一標識一塊內存空間。
⒉指針的大小是固定的4/8個字節(32位平臺/64位平臺)。
- 指針是有類型,指針的類型決定了指針的+-整數的步長,指針解引用操作的時候的權限。4.指針的運算。
- 字符指針
用字符指針吧ch值改掉。
下面這段程序不能理解為p里放了一個字符串,應該理解把字符串首字符a的地址,賦給了p。%s打印字符串從第一個字符開始一直到斜杠0結束
Abcdef/0為常量字符串,并且前面加了const為不可修改狀態。所以在內存中只需要存和一份就夠了,因為他都已經不可修改了自然是大家都要用這個內容所以才不可修改。所以p1和p2為相同的,打印p1==p2
而第二種是數組類型,因為數組需要向內存申請空間來儲存數組里面的元素,所以每用一次都需要申請一次空間,自然arr1和arr2的地址不一樣了。
- 指針數組
顧名思義就是用來存放指針的數組
Int arr[10]整形數組每個元素為【int int int int int int int int int int 】
Char ch[5]字符數組 ??????????【char ?char ?char ?char ?char ??】
Int* arr2[5]存放整形指針的數組【int* ?int* ?int* ?int* ?int* ?】
Char* arr [ 5]存放字符指針的數組【char* ?char* ?char* ?char* ?char* ?】
Parr【】里存了3個數組的首元素地址,當每一個循環則換到下一個元素即數組地址,打印的時候解引用就打印出元素了
- 數組指針
數組指針的定義
數組指針是指針?還是數組?答案是:指針。
整形指針: int * pint;能夠指向整形數據的指針。浮點型指針:float * pf;能夠指向浮點型數據的指針。那數組指針應該是:能夠指向數組的指針。
數組指針——指針——指向數組的指針
整型指針——指向整型的指針
int*
字符指針——指向字符的指針
&數組名和數組名
此程序不能把數組名理解為首元素地址,因為如果是首元素地址的話sz計算應該是這個地址的大小,但實際結果不是。
- 數組名通常表示的都是數組首元素的地址,但是有兩點例外,sizeof(數組名)這里的數組名表示整個數組的大小
- &數組名,這里的數組名依然表示整個數組,所以&數組名取出的是整個數組的地址。從表面意義上來講取出的地址是一樣的,但是數組總要有個地址所以數組的地址和數組首元素的地址是一個相同的地址,但他們的本質不一樣
如果都給他們+1會怎樣
、
可以看到第大一段和第二大段的結果是一樣的,arr表示首元素的地址那么首元素地址為int*類型,int*指針如果+1就是跳過4個字節。
第二段同理,因為兩端程序地址是一樣的
但是第三大端則是直接跳過了40個字節是整個數組的字節
怎么讓數組指針存放數組的地址?數組的地址也是地址,地址就應該存在指針變量里,所以數組指針就是存放數組的地址,(*p2)就是指針了,而且指向數組,數組里有10個元素所以為[10]。那么存的元素是什么類型,為int類型所以最后的格式為int (*p2)[10]=&arr