1樓:匿名使用者
可以!下面是我學習陣列和指標的總結: (1)指向陣列首地址
對於一維陣列a[10]:陣列的首地址為a; 呼叫:p=a; *(a+i)或者*(p+i)
對於二維陣列a[3][4]:整個陣列的首地址為a[0];呼叫:p=a[0]; *(a[0]+i)或者*(p+i)。此時a代表陣列第一行的地址。
(3)指向陣列的每行
形如:int a[3][4];
int (*p)[4]; p=a;
呼叫:*(*(p+i)+j)例:;
int (*p)[4],i,j;
cin>>i>>j;
p=a; //a代表的是陣列第一行的首地址.
cout<<*(*(p+i)+j)< (4)指標陣列 例如:(字串陣列指標法) ; cout< 處理字串還有以下方法: (字元陣列法,c-string法) ;cout< (字串陣列法,string法) ; cout< 三種方法的共同點是name[0]都是代表的"basic"的首地址而非其本身。 (5)指向指標的指標 形如 char **p;例:; p=name+2; cout<<*p< cout<<**p< 分析:*p=name[2]= "c++"的首地址,(通常所說一個字串的「地址」實際上指的是它的「首地址」或者「起始地址」),用cout 輸出的不是字串的首地址而是整個字串(只要把一個字串的起始地址給它,cout就一直往後面輸出,直到遇到結束符'\0'為止),為了證明這一點,請看:string a=「finish」;cout<
故:本例中第一個*p輸出"c++",第二個**p代表"c++"的首地址的內容,即c。 在上一例中,name[0]為"basic"的首地址,輸出"basic",若換成*name[0]則輸出b,若換成name則代表整個陣列的首地址(而不是單個字串"basic"的首地址),所以此時輸出的是整個陣列的首地址。若用*name則輸出整個陣列的首地址的內容,即"basic"(可見字串的首地址內容為單個字元,一維陣列首地址的內容為它的第一個元素,對於二維陣列,比如int a[3][4],a代表的是第一行的地址,所以cout<
2樓:匿名使用者 可以。a是陣列名,相當於陣列的首地址,b是一個指標,int *b = a; 然後b就指向a這個地址,呼叫b[4]就是b+4的地方,也就是a+4這個地方,然後就是同一個地方,所以b[4]等價於a[4] 陣列名和指標的區別? 3樓:百度使用者 可以!下面是我學習陣列和指標的總結: (1)指向陣列首地址 對於一維陣列a[10]:陣列的首地址為a; 呼叫:p=a; *(a+i)或者*(p+i) 對於二維陣列a[3][4]:整個陣列的首地址為a[0];呼叫:p=a[0]; *(a[0]+i)或者*(p+i)。此時a代表陣列第一行的地址。 (3)指向陣列的每行 形如:int a[3][4]; int (*p)[4]; p=a; 呼叫:*(*(p+i)+j)例:; int (*p)[4],i,j; cin>>i>>j; p=a; //a代表的是陣列第一行的首地址. cout<<*(*(p+i)+j)< (4)指標陣列 例如:(字串陣列指標法) ; cout< 處理字串還有以下方法: (字元陣列法,c-string法) ;cout< (字串陣列法,string法) ; cout< 三種方法的共同點是name[0]都是代表的"basic"的首地址而非其本身。 (5)指向指標的指標 形如 char **p;例:; p=name+2; cout<<*p< cout<<**p< 分析:*p=name[2]= "c++"的首地址,(通常所說一個字串的「地址」實際上指的是它的「首地址」或者「起始地址」),用cout 輸出的不是字串的首地址而是整個字串(只要把一個字串的起始地址給它,cout就一直往後面輸出,直到遇到結束符'\0'為止),為了證明這一點,請看:string a=「finish」;cout<
故:本例中第一個*p輸出"c++",第二個**p代表"c++"的首地址的內容,即c。 在上一例中,name[0]為"basic"的首地址,輸出"basic",若換成*name[0]則輸出b,若換成name則代表整個陣列的首地址(而不是單個字串"basic"的首地址),所以此時輸出的是整個陣列的首地址。若用*name則輸出整個陣列的首地址的內容,即"basic"(可見字串的首地址內容為單個字元,一維陣列首地址的內容為它的第一個元素,對於二維陣列,比如int a[3][4],a代表的是第一行的地址,所以cout<
c語言中陣列名和指標的區別 4樓:匿名使用者 陣列在當作引數傳遞時,可以當作指標;當然,引數傳遞相當於賦值操作,所以用指標來接受陣列的值也是可以的。 除此之外,指標就是指標,陣列就是陣列,一點也不一樣,例如1,陣列名不能作為左值,即不能被賦值,也不能進行++ --操作2,sizeof 陣列名 和 sizeof 指標 不同 5樓: 陣列名本質上就是個指標,也就是地址,但是它是一個常指標,是個固定值,而指標是是指標變數的簡稱,是個變數,這個變數存放的是地址值,它的值是可以改變的。例如: int *p; int a,b; p=&a; //把變數a的地址賦值給指標p,那麼指標p就指向了變數a的記憶體單元 p=&b; //把變數b的地址賦值給指標p,那麼指標p就指向了變數b的記憶體單元 int a[10]; //整型陣列,陣列名a本質上是一個地址,是首元素地址,它是一個固定值,不能對它進行賦值操作。 陣列指標和指標陣列的區別 6樓:匿名使用者 陣列指標(也稱行指標) 定義 int (*p)[n]; ()優先順序高,首先說明p是一個指標,指向一個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。 如要將二維陣列賦給一指標,應這樣賦值: int a[3][4]; int (*p)[4]; //該語句是定義一個陣列指標,指向含4個元素的一維陣列。 p=a; //將該二維陣列的首地址賦給p,也就是a[0]或&a[0][0] p++; //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1] 所以陣列指標也稱指向一維陣列的指標,亦稱行指標。 指標陣列 定義 int *p[n]; 優先順序高,先與p結合成為一個陣列,再由int*說明這是一個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1時,則p指向下一個陣列元素,這 樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指標變數可以用來存放變數地 址。但可以這樣 *p=a; 這裡*p表示指標陣列第一個元素的值,a的首地址的值。 如要將二維陣列賦給一指標陣列: int *p[3]; int a[3][4]; p++; //該語句表示p陣列指向下一個陣列元素。注:此陣列每一個元素都是一個指標 for(i=0;i<3;i++) p[i]=a[i] 這裡int *p[3] 表示一個一維陣列記憶體放著三個指標變數,分別是p[0]、p[1]、p[2] 所以要分別賦值。 這樣兩者的區別就豁然開朗了,陣列指標只是一個指標變數,似乎是c語言裡專門用來指向二維陣列的,它佔有記憶體中一個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,佔有多個指標的儲存空間。 還需要說明的一點就是,同時用來指向二維陣列時,其引用和用陣列名引用都是一樣的。 比如要表示陣列中i行j列一個元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 優先順序:()>>* 7樓:千鋒教育 指標陣列:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標。 陣列指標:a pointer to an array,即指向陣列的指標。 還要注意的是用法的區別,下面舉例說明。 int* a[4] 指標陣列 表示:陣列a中的元素都為int型指標 元素表示:*a[i] *(a[i])是一樣的,因為優先順序高於*int (*a)[4] 陣列指標 表示:指向陣列a的指標 元素表示:(*a)[i] 注意:在實際應用中,對於指標陣列,經常這樣使用: typedef int* pint; pint a[4]; 這跟上面指標陣列定義所表達的意思是一樣的,只不過採取了型別變換。 **演示如下: #include using namespace std; int main() ;int *a[4]; //指標陣列 int (*b)[4]; //陣列指標 b=&c; //將陣列c中元素賦給陣列a for(int i=0;i<4;i++) //輸出看下結果 cout<<*a[1]< }注意:定義了陣列指標,該指標指向這個陣列的首地址,必須給指標指定一個地址,容易犯的錯得就是,不給b地址,直接用(*b)[i]=c[i]給陣列b中元素賦值,這時陣列指標不知道指向**,除錯時可能沒錯,但執行時肯定出現問題,使用指標時要注意這個問題。但為什麼a就不用給他地址呢,a的元素是指標,實際上for迴圈內已經給陣列a中元素指定地址了。 但若在for迴圈內寫*a[i]=c[i],這同樣會出問題。總之一句話,定義了指標一定要知道指標指向**,不然要悲劇。 8樓:e時代幽默網 陣列指標,就是一個指向陣列首元素的指標,或者說是指向一個陣列起始記憶體地址的指標。 指標陣列,就是一個陣列中的所有元素型別均為指標,也就是說是一個專門用來存放一堆指標的陣列。 c中,陣列名跟指標有區別嗎 9樓:匿名使用者 其實可以認為陣列名就是一個不可更改的常量指標。但是 ,嚴格來說,二者有一定區別,比如sizeof(a),a為陣列名的時候,算出來是a這個陣列所佔位元組數,但是如果a是指標,不管指向什麼,結果都是一個int的位元組數(取決於特定機器)。因而,有人認為陣列名是一個可以退化為常量指標的型別,這種退化在陣列名作為函式形參的時候表現得最為明顯,可以參考陣列名作為形參退化為指標的問題。 首先,第一行肯定是輸出亂碼,解釋2個知識點你就知道了 1.陣列和指標的區別,其實對於你的問題這不是最重要的,不過既然你問道區別就說說吧 陣列名確實表示指向陣列首地址的指標,但這個指標很特別,它的值 指標的值指的是指標所指的地址 不能被改寫,能改寫的僅僅是其指向的內容,換句話說,陣列名只能指向陣列的首... int p 4 這個就是行指標 這種型別的指標p是指向一個一維陣列,這個一維陣列包含4個整形元素 但是 int a 4 p a 這種方式卻是不對的 因為p只能指向一個整型的一維陣列,不能指向一個整型資料,a所指向的正是a 0 是個整型數 實際上int p 4 這種型別的指標是用於多維陣列中的,比如定... c語言中,同變數一樣 陣列也必須先定義後使用。一維陣列的定義形式 型別識別符號 陣列名 常量表示式 例如int a 10 其中a為地址常量。如變數的定義一樣,int a double a float a等 陣列的定義只是把後面的變數名改為陣列名而已。int a 10 就是定義了一個陣列名為a的陣列 ...C指標與陣列名的區別,求助高手
c語言中指標陣列和行指標的區別是什麼
c語言中如何定義陣列C語言中如何定義陣列