C C 陣列與指標

2021-10-25 06:24:16 字數 2276 閱讀 7811

經常使用stl導致陣列與指標都陌生了,複習總結一下

c/c++裡指標確實更高效了,也更複雜了

陣列的建立

type_t arr_name[const_n]

;//type_t指數組的元素型別,const_n指常量表示式

int arr[10]

;//is ok

陣列的初始化

int arr1[10]

;//不進行初始化,存放未知值

int arr2[10]

=;//進行初始化,則未進行初始化位置初始化為0

int arr3=

;//首先要知道 "a"---是const char*型別,並且"a"其實是有\0的,所以sizeof("a")=2;

//'a'---是char型別;sizeof('a')=1;

char ch1=

"abc"

;//sizeof(ch1)=4;

char ch2=

;//sizeof(ch2)=3;由於沒有'\0',列印的時候會出現燙燙燙

char ch3[10]

=;//sizeof(ch3)=10;其餘空間初始化為0,%s列印的時候對應的是空格

char ch4[10]

="a"

;//sizeof(ch4)=10;其餘空間初始化為0,

printf

("%s"

,ch1)

;//ch1---char * %s列印

printf

("%c"

,ch1[0]

);//ch1[0]---char %c列印

type_t arr_name[const_n]

[const_n]

;int arr1[5]

[5];

int arr2[

5]=;

//第二列未初始化資料初始化為0

注意:二維陣列傳參需要傳二級指標,並且需要傳行數(row)與列數(column)

void

tests1()

;printvv((

int*

*)arr2,2,

5);//強制轉換為int**

}void

printvv

(int

**arr,

int row,

int col)

printf

("\n");

}}

double a =10;

int b =10;

double

*p1 =

&a;int

*p2 =

&b;printf

(" p1:%d\n"

, p1++);

printf

("++p1:%d\n"

, p1)

;printf

(" p2:%d\n"

, p2++);

printf

("++p2:%d\n"

, p2)

;

輸出

p1:11533312

++p1:11533320

p2:11533300

++p2:11533304

指標的使用
//一些線上oj經常會遇到的題,平時不要這樣寫,容易挨揍

int a1[5]

=;int*ptr=

(int*)

(&a1+1)

;//&a是int**型別,是指向a位址的位址,對指向(int a[5])型別的指標+1操作之後,則增加整個陣列的長度,之後又被強轉為int*

//對於這裡的(int a[5])型別,編譯器是這樣提示的,也確實好理解多了

printf

("%d,%d",*

(a1+1)

,*(ptr-1)

);//輸出2,5

int a2[3]

[2]=

;int

*p; p = a2[0]

;//隱士型別轉換,(int a2[3][2])轉換為(int *)可以理解為轉換為了(int a[2])

printf

("%d"

, p[0]

);//可以看成a2[0][1],所以輸出位1

C C 指標與陣列

在二維陣列傳參時,經常遇到這樣的問題,不能將 int 轉換為 int 5 雖然二維陣列a 5 5 的a是二級指標,但是用int 是單純的二級指標,但是二維陣列的a是完全不同的。a 0 表示第一行一維陣列,a 1 表示第二行二維陣列,a是具有結構的,這一點和普通的二級指標具有很大的區別。int p 5...

C C 指標與陣列

目錄 陣列記憶體位址 指標 偏移 指標加減法 指標變數遍歷陣列 取乙個變數的位址 符號 int a 4 a取得變數a的記憶體位址 陣列是一塊連續的記憶體,型別 名字 個數 sizeof 型別 個數,連續的記憶體 區域性變數的陣列,所以這個陣列的記憶體是分配在我們的棧上的 連續的記憶體,由低位址排到高...

C C 陣列與指標

include using namespace std int main char pa a cout pacout pa cout pacout pa cout pa signal segmentation fault core dumped return 0 編譯器不識別陣列 陣列就是指標a就是...