C/C++語言指針用法詳解 (六) 指針和數組

標明出處,歡迎轉載!!!

知識至上,歡迎指正!!!


 

1.定義

指針和數組基本等價的緣由在於指針算術和C++內部處理數組的方式。  ——《C++PrimerPlus》第五版html

 

在多數狀況下,C++將數組名解釋爲數組中第一個元素的地址。c++

   int arr[10] = {1,2,3,4,5};
   int *p = arr;
   cout<<" -------------- 3 種方式獲得數組的地址 ------------------- "<<endl;
   cout<<"arr     -> "<<arr<<endl;
   cout<<"&arr[0] -> "<<&arr[0]<<endl;
   cout<<"p       -> "<<p<<endl;
   cout<<" -------------- 4 種方式獲得數組的值 ------------------- "<<endl;
   cout<<"arr[1]     -> "<<arr[1]<<endl;
   cout<<"*(arr+1)   -> "<<*(arr+1)<<endl;
   cout<<"*(p+1)     -> "<<*(p+1)<<endl;
   cout<<"p[1]       -> "<<p[1]<<endl;

 

總結:數組

arrayname[i]    等價於  *(arrayname+i)  

2.指針數組和數組指針

這部分參考微博:http://www.cnblogs.com/Romi/archive/2012/01/10/2317898.htmlspa

指針數組:array of pointers,即用於存儲指針的數組,也就是數組元素都是指針3d

數組指針:a pointer to an array,即指向數組的指針指針

還要注意的是他們用法的區別,下面舉例說明。htm

int* a[4]     指針數組     對象

                 表示:數組a[4]是指針,指針的類型是int*,指針的指向類型是intblog

                 元素表示:*a[i]   *(a[i])是同樣的,由於[]優先級高於*ci

int (*a)[4]   數組指針     

                 表示:a是指針的類型是int*[4], 指針的指向的類型爲int()[4]

                 元素表示:(*a)[i]  

#include<bits/stdc++.h>
using namespace std;
int main()
{
   /***   指針數組
    ** <數組 pstr[3],數組的元素是指針>  三省指針:指針的類型是 int * ,指向的類型是int ,數組內每一個指針分別指向 三個字符串的首地址
    ***/
   char *pstr[3] = {
    "Socialism",
    "with",
    "Chinese"
   };
   cout<<" pstr[0]  "<<pstr[0][0]<<endl;;
   cout<<" pstr[1]  "<<pstr[1]<<endl;;
   cout<<" pstr[2]  "<<pstr[2]<<endl;;

   /***   數組指針
    ** <指針 pstr1>  三省指針:指針的類型是 int (*)[20] ,指向的類型是int()[20] ,指針指向 str1
   ***/
   char str1[20] = "Characteristics";
   char (*pstr1)[20] = &str1;
   //b=&str1;
   cout<<" *pstr1   "<<*pstr1<<endl;;
}

 

注意:字符串至關於一個數組常量,內容不可改變,且只能爲右值,若是當作指針,便是常量指針也是指針常量

指針常量:該指針是一個常量,不可改變,指向某一個地址就不能改變,可是0指向的單元是能夠改變的,通常讀作常量指向

常量指針:指針的值不能改變,可是自身是一個變量,讀做指向常量

3.數組首地址的總結

數組名是數組的首地址

a)含義:

聲明一個數組  :   TYPE  arrayname[N];

有兩層含義:1.arrayname是一個數組,類型是TYPE[N]

                      2.array是一個常量指針,指針的類型是TYPE *,指向類型是TYPE,指向的值是數組的第0號元素,注意arrayname和數組第0號元素的地址是不一樣的,arrayname是指針常量,arrayname++是錯誤的。

b)功能

sizeof(arrayname)   &arrname   arrayname表明的是數組自己,獲得的是整個數組的大小 此時  &arrname 表示的是 指向是整個數組
*arrayname (等同 arrayname[0])  arrayname表明的是指針,獲得的是數組第0號元素的值
arrayname+i arrayname表明的是指針,獲得的是指針向後偏移i個指向類型的單位的指針

補充:sizeof(對象)測出的都是對象自身的類型大小

相關文章
相關標籤/搜索