天天看點

指針和數組

指針:

 指針在本質上是一個變量;指針需要占用一定的記憶體空間;指針用于儲存記憶體位址的值

*号的意義:

 在指針聲明時,*号表示所聲明的變量為指針;

 在指針使用時,*号表示取指針所指向的記憶體空間中的值 ;

 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函數傳遞參數

指針和數組

多元數組和多元指針:

 指向指針的指針:

  指針變量在記憶體中會占用一定的空間;可以定義指針來儲存指針變量的位址值

繼續閱讀