第七章 指標

      在〈第七章 指標〉中尚無留言

位址

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *