位址
每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”