C語言 - 指針 1.2:指針和數組

指針和數組

1 - 指針對應的數組元素ios

1     int ages[5]={10,9,8,7,6};
2     int *p = ages;// 等同於:int *p = &ages[0];
3     // 第1個元素的地址 p,&ages[0]
4     // 第2個元素的地址 p+1,&ages[1]
5     // 第3個元素的地址 p+2,&ages[2]
6     // ......

2 -  示例代碼:利用指針,遍歷出數組元素數組

1     int ages[5]={101,19,21,33,22};
2     int *p = ages;
3     for(int i=0;i<5;i++)
4         printf("%d\t",*(p+i));
5     printf("\n");

3 - 數組元素的三種訪問形式緩存

(1) 數組名[下標]iphone

(2)指針變量名[下標]spa

(3) *(指針變量+下標)指針

1     char *arr[4]={"ios","iphone","ipod","abc"};
2     printf("%s \n",arr[1]);// 輸出:iphone
3     printf("%c \n",*(*(arr+1)+2));// 輸出:h
4     printf("%s \n",arr[2]);// 輸出:ipod
5     printf("%c \n",*(arr[2]+3));// 輸出:d

注  指針變量的+1或-1到底是加、減多少?這取決於指針的類型:若是是 char 類型的指針就加1個字節;若是是 int 類型的指針則加4個字節code

4 - 利用指針來接收一個數組,指針變量指向數組的首元素blog

1 void change(int array[]);// 等價於 void change(int *array) 

5 - 數組名錶明數組的首元地址,它是一個指針常量,指針能夠當數組名使⽤,區別是二者在內存中所佔字節數不同ip

 1     char string[10] = "iphone";
 2     char *p = string;
 3     printf("%p \n", p);// 輸出地址:0x7fff5fbff62e
 4     
 5     *(p+1)='P';// 操做單個字符串
 6     printf("%s\n",p);// 輸出:iPhone
 7     printf("%c\n",*p);// 輸出:i
 8     printf("%c\n",*(p+2));// 輸出:h
 9 
10     p++;//向高位偏移
11     printf("%s \n",p);// 輸出:Phone
12     printf("%c \n",*(p+1));// 輸出:h
13     printf("%s \n",string);// 輸出:iPhone
14     printf("%s \n",string+1);// 輸出:Phone

 

指針和字符串

1 - 比較兩行代碼有什麼不一樣內存

1     char name[] = "it";
2     char *name2 = "it";
3     
4     name[0]='g';
5     printf("%s\n",name);// 輸出:gt
6 
7     *name2= 'y';// 運行到此句崩潰
8     printf("%s\n",name2);

解析:name 是字符串變量,*name2是字符串常量。C語言的數組元素存放於棧,裏面的元素能夠隨便修改,稱爲字符串變量;而字符串常量存放於常量區,會緩存起來是不可更改的

1   char *name1 = "it";
2   char *name2 = "it";
3   printf("%p\n%p\n",name1,name2);// 地址是同樣的,說明 name1 和 name2 指向的是同一個字符串

指針數組

1 - 定義:以整型數組爲例,在這個數組中存放的都是整型,那麼指針數組就是在數組中存放的都是指針

1   int ages[5] = {0};
2   char *name[10]={"jack","rose","dany"};// 等同於 char name[3][10] = {"jack","rose","dany"};

2 - 指針數組的重指向

1     char melee[3][20] = {"李小龍","查克·諾里斯","增根泰三"};
2     char *firstFighter[3] = {"fist","foot","waist"};
3     firstFighter[0] = &melee[0][0];// 從新指向
4     printf("%s\n",*firstFighter);// 輸出:李小龍

3 -  在控制檯中,何輸入字符串?(使用數組,爲何?由於可變)

1   char name[20];
2   printf("請輸入姓名:\n");
3   scanf("%s",name);
4   printf("您輸入的姓名是:%s\n",name);
相關文章
相關標籤/搜索