1樓:大愛貓
一:陣列指標:陣列名本身就是一個指標,指向陣列的首地址。
注意這是宣告定長陣列時,其陣列名指向的陣列首地址是常量。而宣告陣列並使某個指標指向其值指向某個陣列的地址(不一定是首地址),指標取值可以改變。 二:
陣列指標:是指向陣列的一個指標,如int (*p)[10] 表示一個指向10個int元素的陣列的一個指標。 另外還有一個指標陣列 主要用來指向若干字串,使字串的處理更加靈活。
同時,我們應該清楚知道,字串本身就是一個一維陣列。 對於指標陣列應注意以下幾點: (1):
陣列中的元素均為指標型別資料 (2):在給陣列賦值時,表面看到是比如字串等,但實際陣列元素本身的值並不是字串,而是字串的首地址 eg. main() ; //這裡返回指標值的陣列name各元素的值並不是以上這些字串,而是這些字串的首地址 ......
} 這是兩則的區別。 指標陣列:指標的陣列,陣列的元素是指標; int *p[2]; 首先宣告瞭一個陣列,陣列的元素是int型的指標,這個陣列的元素是p[0], p[1]兩個整形指標 陣列指標:
指向陣列的指標。 int s[2], *p; p = s; 這個陣列的元素是2個整型數
2樓:2貨
陣列指標存的是陣列的首地址,也就是第一個變數的地址
陣列指標,指標陣列區別!要詳細,超詳細!我區分了好多次了,還是不清楚啊
3樓:匿名使用者
int a[3][4]這個無需多說,就是一個二維陣列。
int (*p)[4]就相當於int p[4],它就是一個二維陣列的指標,可以指向一個第二維度為4的二維陣列。而a就是這樣的陣列,因而下面是合法的。
p=a;
int *p[3]是指標陣列。說白了,就是定義了三個指標,分別為p[0],p[1],p[2]。可以將他們單獨拿來使用。
int a1,a2,a3;
p[0]=&a1;
p[1]=&a2;
p[2]=&a3;
4樓:草迎風
1、在c和c++中陣列的指標就是陣列的起始地址(也就第一個元素的地址),而且標準文件規定陣列名代表陣列的地址(這是地址數值層面的陣列表示)。
2、指標陣列是指一個陣列中的每個元素都是一個指標,也就是多維陣列。
說白了,陣列指標就是指指向陣列首地址的指標,也可以說是陣列的首地址。而指標陣列,按字面意思,指標的陣列,存放指標的陣列,也就是陣列中每一個元素都是指標,即多維陣列。
總而言之,陣列指標是指一個指標,而指標陣列是一個多維陣列。
例子:int a[3][4];int (*p)[4];int *p[3]
第一個,是指標陣列,a[3][4]可以看成是存放三個指標的陣列a[3],且每個指標指向一個存放4個整型資料的陣列。
第二個,int (*p)[4];這個和第一個例子的表達的意思一模一樣,我們可以這樣賦值:
int (*p)[4]=a;其中p表示指向存放4個整型資料陣列的指標,不過它沒有給出指標的具體定義,所以我們還可以用這樣賦值來理解:
若int b[n][4];(n為int資料)則int (*p)[4]=b;(p也是指向一個存放4個整型數的陣列,但這裡有n個p指標!)。
第三個,int *p[3];它定義了一組存放三個指標的整型陣列,我們可以近似地理解:
如int *q;(定義了一個q指標);
int *p[3];(定義了一組指標)。(這一組指標的定義等同於這樣三個指標的定義:int *x,*y,*z。)
5樓:匿名使用者
其實很簡單,不論是什麼指標,只要是型別匹配地址它就可以存放,因為指標就是地址!
int a[3][4] 這是一個普通的二維陣列
int (*p)[4] 這是一個指向有4個int型的一維陣列的指標,可以稱它為行指標(一行有4個int)
int *p[3]這是個有三個元素為指標的陣列
後面兩者都有指標,所以只要是地址,後面兩者都可接收,關鍵是在運算的時候你要弄清楚它具體是個什麼樣的指標,因為它們移動的位是不同的。普通指標一次移動一個元素,行指標一次移動一行。。。int a[3][4];int (*p)[4]=a;這樣把a的首地址給了行指標,p+i就是將p移到了a 的第 i行。
可以把*和&看成逆運算,行指標取*就成了列指標,也就是普通指標。*(p+i)就是一個位於a第i行首元素位置的普通指標,再移動j個位置取*就得到了a[i][j]的值即*(*(p+i)+j),用for迴圈可以輸出陣列。
如果用for(i=0;i<3;i++) p[i]=a[i];這樣三個普通指標分別指向了a的三行,可以用
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%d",*(*(p+i)+j));輸出a的所有元素。其中*(p+i)為p[i].
6樓:匿名使用者
int a[3][4]; 這個不用多說一個二維陣列。
int (*p)[4];這個是指向陣列的指標,就是說定義了一個 p 指標變數,它是指向int型陣列的。
可以讓p指向a, p=a;他就是一個指標變數。用法你還是自己試試才能明白。
int *p[3];這個肯定就是一個陣列了,就像int p[3],只不過他是int 指標型別了,
也就是說p[0],p[1],p[2] 只能放一個地址。
你在慢慢體會一下,明白就自己在程式設計試試就知道了。
7樓:白花戀歌
指標陣列,array of pointers
陣列指標 a pointer to array
看看英文名字就知道了,中文翻譯真的害死人。。。。
8樓:匿名使用者
陣列指標--指向陣列的指標,是一個指標,其指向的型別是陣列;指標陣列--元素為指標的陣列,是一個陣列,其中的元素為指標。
9樓:
這個不好描述,不過用od一看你就明白了,如 int a[3][4]; 就a在程式偏移地址0x000ef456:0x00,0x00,0x00,0x00,.
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
c語言中對陣列那麼指標的理解
10樓:太平洋的豬頭
你第一句話就錯了。*(a+i)表示的是在a+i那塊記憶體空間的值,而不是地址。
關於指標陣列和陣列指標的,用法和區別
11樓:
關於兩者怎麼用?有什麼區別?推薦看c專家程式設計。裡面有兩章對此描述的非常詳細。如果想弄明白,就要自己對懷疑的地方程式設計練習,很快就會弄懂。在這裡就不班門弄斧了。
關於接下來的兩個問題:
int (*p)[4]; 對於宣告,c專家程式設計也進行了詳細的介紹--可以參考。
上面的宣告是說: p是一個指標,指標指向一個陣列,陣列的大小為4,陣列元素的型別為int型。
int *s = ;
首先說一下int *s是什麼意思: s是一個陣列,陣列元素的型別為指標,指標指向一個int型的值。
你這樣給陣列初始化,單就這一表示式來看是不錯的。但是對於初始化的變數a, b, c, d, e你有沒有在初始化前定義,並且它們的型別應該是int型。
如下所示:
int a = 1, b = 2, c = 3, d = 4;
int * ptr_arr = ;
這樣就不會出錯了。
12樓:
指標陣列:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標。
陣列指標:a pointer to an array,即指向陣列的指標。
還要注意的是他們用法的區別,下面舉例說明。
int* a[4] 指標陣列
表示:陣列a中的元素都為int型指標
元素表示:*a[i] *(a[i])是一樣的,因為優先順序高於*int (*a)[4] 陣列指標
表示:指向陣列a的指標
元素表示:(*a)[i]
13樓:
int (*p)[4]就是建立的名為「p」的一個 陣列指標(「陣列」是「指標」的定語,理解為「陣列型別的指標」,p指向的是一個 有四個int元素的陣列)
後面int *s... 就是宣告的一個 指標陣列(「指標」是「陣列」的定語,理解為「指標型別的陣列」,每一個元素都是指標)
出錯:我用vc 6.0跟devc++(內建gcc標準編譯器)都可以那樣的宣告的。
或者你可以把全部**(或上下文**)貼出來。
14樓:匿名使用者
int (*p); //陣列指標
int *s; //指標陣列
區分是哪種情況,可以根據*,(),〔〕的優先順序進行處理。
〔〕優先順序高於* 所以,*s這種情況下,s先是一個陣列,後才是指標,表示陣列的每個元素都是指標,所以叫指標陣列,又名 儲存指標的陣列。
()優先順序最高,高於,(*p)這種情況下,p先是一個指標,後指向一個陣列,此陣列沒有變數名,表示,指標指向了某個陣列,所以叫陣列指標,又名 指向陣列的指標。
int *s=;//可以這樣玩,前提是你要先定義int a,b,c,d,e;!
15樓:匿名使用者
指標陣列是一大堆指標放在一陣列內。每一個成員都可以指向一個變數。
陣列指標是一個指向陣列的指標。這個指標可以指向陣列裡的變數成員。用個迴圈體就可以了。
定義陣列指標:
int a[10];
int *p;
p=a;//把首地址賦給p。
定義指標陣列:
int *s=;//整型
char *s=;//字元。
int *s=;//首先是整型,但是變數不是整型。換成字元也不是字元。只是a,b等的地址。地址不能做變數吧?
希望幫到你。
c語言,指標與一維陣列的結合,最好按下面三種方法都編下,好讓我去理解
16樓:匿名使用者
// 下面的**用的的是方法1
#include
const int n = 20;
int isprime(int n)
void sort(int a, int n)if(i != k) }}
int main()
sort(b,n);
for(i = 0; i < n; ++i)printf("%d ",b[i]);
printf("\n");
return 0;}
指標函式 函式指標 指標陣列 陣列指標 函式指標陣列怎樣去理解
17樓:
指標函式——返回指標的函式;
函式指標——指向函式的指標;
指標陣列——每個元素都是指標的陣列;
陣列指標——指向陣列的指標;
函式指標陣列——每個元素都是指向函式的指標的陣列。
陣列指標和指標陣列怎樣理解,當他們作為函式引數時,怎樣呼叫的,求詳解,謝謝.
18樓:匿名使用者
這個問題很有趣,要理解有個前提,你至少要思考過陣列怎樣在記憶體中儲存,並且一個位元組一個位元組地畫過。
無論陣列指標,還是指標陣列,這樣的名詞性短語重心都在後面,所以陣列指標是個指標,指標陣列是個陣列。
陣列指標的例項:int(*p)[5]; 可以這樣解釋其定義:p是個指標,指向一個陣列,陣列有5個元素,每個元素是一個int型整數。
在記憶體中,p就是一個佔4位元組的變數,變數的值是個地址,在記憶體的那個地址處,有4*5=20個連續位元組被認為是一個int[5]陣列。做一次p++,p的值增加20。這種特性和二維陣列是有相似之處的,比如int k[3][5],事實上,可以這樣賦值:
p=k。 如果要在形參裡使用,可以將變數名去除,就抽象出資料型別。典型的函式宣告可以這樣寫:
void f( int(*)[5] ); 典型的實參呼叫可以這樣寫:f(k); 這裡的k是int k[3][5]二維陣列。我印象裡要把二維陣列名作實參使用,形參只能寫成陣列指標,形參直接寫成二維陣列是不行的,void f( int [3][5]);這樣宣告會報錯。
也不能寫void f( int** ); 因為int**和intint(*)[5]是不同的,前者做++只增4,後者增20。
指標陣列的例項:int*p[5]; 這樣解釋:p是個陣列,陣列有5個元素,每個元素是一個指標,指向一個int型整數。
這裡p是陣列名,是指標常量而不是變數,不可以對p賦值,這和上面比,是本質區別。從記憶體佔用情況來看,他和int p[5]沒啥區別,每個元素都佔4位元組。所以使用時可以參考整型陣列,只要把int替換成int*就行了。
比如宣告時可用void f( int*[5] );,也可用void f( int** );。呼叫實參時,就把實際的指標陣列名傳入即可,比如f(t);,這裡t是 int*t[5]。
這點篇幅其實是說不完的,書裡都用一整章來講呢。還是開頭說的,研究一下陣列及指標在記憶體裡怎樣儲存,一個位元組一個位元組畫一畫,有好處。
指標陣列函式的用法
應該這樣定義 const int temp int a,int b 但是函式不能返回一個陣列.這樣也編不過.請參考 include const int fun1 int a,int b const int fun2 int a,int b typedef const int fun int a,in...
求解陣列與指標的關係
這應該是一個求a b陣列裡面有幾個相同值的函式,條件應該是兩陣列都順序排序了,不然就有問題了。陣列和指標有一定的區別,不過一般情況下,它們是可以劃等號的,陣列變數如果不加下標的話,就是指向陣列記憶體第一個數的指標了,所以這樣將指標遞增,就可以做到遍歷陣列。記住指標就是地址,取星 p表示這個地址裡面放...
怎麼理解指向二維陣列的陣列指標是二級指標
一維陣列的名其實就是指標,如int a 4 a就相當於一個指標 int p a 沒錯 但是二維陣列 int aa 2 3 這個時候是不能用int pp aa 是錯誤的。實際上二維陣列的第一維是int ab 3 是個指標陣列,不是陣列指標。這個時候int ab 3 是與 int 不同的。所以接受二維陣...