經常使用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就是...