位址
每byte都有一個位址
& : 取址運算子,陣列本身就是參考型別,本身就是位址,不需取址
int main(){
int b[]={1,2,3};
int a=0;
printf("%08x\n", &a);
printf("%08x\n", b);
}
指標
指標變數存放記憶体位址
宣告 : int *ptr;
int a=10;
int *ptr=&a; //ptr就可以存取變數a的值
*ptr=20; //*變成存取值,稱取值運算子
printf(“a=%d\n”, a);
printf(“*ptr=%d\n”, *ptr);
*&aç同樣是取值
ptr可隨時變換,比如ptr=&a, ptr=&b;
int *ptr;
*ptr=50;//不會錯誤,但會當機,因為ptr尚未指定指向的空間
需改為如下 :
int *ptr;
ptr=new int;
*ptr=50;
或合併成 int *ptr=new int(50);
一維陣列與指標
陣列可以用指標存取
int a[]={1,2,3,4};
printf(“a[1]=%d\n”, *(a+1));//加1表是加一個陣列元素,不是加1byte
陣列參數
void test1(int *b){//使用*b接收
for (int i=0;i<4;i++){
printf("%d ", b[i]);
}
printf("\n");
}
void test2(int c[]){//使用c[] 接收
for (int i=0;i<4;i++){
printf("%d ", c[i]);
}
printf("\n");
}
int main(){
int a[]={1,2,3,4};
test1(a);
test2(a);
system("pause");
return 0;
}
new delete運算子
int *ptr=new int;使用完後,一定要delete ptr; 否則此空間會一直佔住不能用
int *ptr=new int[3]{0};初始化為0
不等長度的char
char **str=new char*[3];ç相同於char *str[];
str[0]="abcd";
str[1]="kkkkkkkk";
str[2]="bbbbbbbbbbbbbbbbb";
for (int i=0;i<3;i++){
printf("%s \n", str[i]);
}
int **ptr=new int *[2];
ptr[1]=new int[5]{0};ç第一列有5個元素
ptr[2]=new int[3]{0};ç第二列有3個元素
main函式中的參數
int main(int argc, char *argv[]){
for (int i=0;i<argc;i++){
printf("%s\n", argv[i]);
}
在命令列輸入 test.exe abc def 123
則argc為4
argv[0]= “test.exe”
argv[1]= “abc”
