C 陣列與指標,C 陣列與指標

時間 2022-07-11 17:20:08

1樓:

首先看p:

它是一個指向int *型別指標的指標。

再看b:

b在除了sizeof(b);的其他所有表示式中均隱式的轉換成一個指向它儲存物件型別的指標。(只在表示式中才這樣的轉化)。在c/c++中其實是沒有多維陣列的。

多維陣列都是通過一維陣列實現的。其實陣列本身也是一種物件。int b[2][2]實際上可以理解成int[2] b[2]。

int[2]可以看成是一種型別,理解成和char,int是一樣的。這樣b[0]其實就是int[2]型別的一個物件而已。b在表示式中就轉化為一個指向int[2]型別的指標即int(*b)[2]。

總結:p和b指標型別不同,指標指向的型別也不同,除強制型別轉換外根本就不能相互賦值。

如果這個時候你還是要使用二維指標的話還有兩種方法:

1.藉助指標陣列

int *c[2]=;//這裡的b[0],b[1]其實是int[2]型別的陣列,則陣列名在表示式中均隱式的轉換成一個指向它儲存物件型別的指標,b[0],b[1]中儲存的均為int型別的變數,則轉化為int *型別的指標,這樣才能初始化指標陣列。

p=c;//這裡的c也隱式的轉化成指向它儲存物件型別的指標,它儲存的物件型別為int *,則c就隱式的轉化成int **型別,這樣就和p的型別相同了。然後通過*(*(p+i)+j)來訪問陣列。

2.把二維陣列當做一維陣列來訪問

*p=b[0];//*p為一維指標,b[0]和上相同,不在累述,型別相同可以賦值

則就可以通過*(p+i*j+j)來訪問陣列中的各個元素了。

其實這也是我大學時剛學c語言的疑惑,都是這麼過來的,lz要多努力,如果是初學的話,要學的東西還是有很多的。

2樓:

因為b實際上是一個長度為2的一維int陣列的常指標,它和int**是有區別的,c++中這兩種不能通過=來隱式轉換。

其實你可以這麼寫int *p = *b;這樣p[3]就相當於b[1][1]了。

另外,如果要動態建立一個二維陣列的話可以這麼寫:

int** p = new int*[10];

for(int i = 0; i < 10; ++i)p[9][9] = 9;

cout << p[9][9];

而且每個p[i]分配的空間可以不一樣大,歸還空間的時候這樣寫:

for(int i = 0; i < 10; ++i)delete p;

我用的是gcc4.4.0,vc上沒試過。。。

3樓:積木

在這裡,b的型別是:int (*p)[2]。如果存在賦值p=b的合理情況,那麼編譯器在p++操作的時候,是讓p加幾呢?

按照int(*)[2]型別的話,應該是加2,而按照int** p的話,則加1。這會讓編譯器無所適從,因此,p=b是不被允許的,這樣才使得,p++只有一種可能性:加2(第二維的大小)。

要想用指標來操作其中的每一個元素,可以將b強制型別轉換:int* p = (int*) b,然後利用陣列地址的連續性,使用*(p + i)進行訪問。

4樓:

本質上講,c不能使用二維及其以上陣列,而只能使用一維陣列.

所以int b[2][2]=;

中的b,只能付給int*型別的變數,

int *x;

x = (int*)b;肯定是沒問題的.

還有int **p;是一個二級指標,只能類似這麼用,int a=1;

int *aa=&a;

int **p=&aa;

和二維陣列完全不搭邊.

5樓:匿名使用者

c/c++ 的基本資料型別中沒有字串,但是 c/c++ 的輸入輸出庫中提供了基於字元指標(或字元陣列)的字串輸入輸出支援。在c語言中,使用 scanf 和 printf 支援字串的輸入輸出;而 c++ 中,則使用 cin 和 cout 實現基於控制檯的輸入輸出。在字元陣列的輸出中,只是將字元陣列元素的首地址及其之後的所有地址對應的字元依次輸出。

同樣的,如果指定了後面的字元指標,則將那個字元指標及其之後的所有字元依次輸出。字串指標(或字元陣列)的最後一個字元之後還有一個字元'\0'作為結束標誌。

c++ 中的 cout 通過運算子過載實現不同型別的輸出支援。以上** cout<

如果你需要輸出以上字元陣列的整數地址,可以使用printf("%x",s); // 輸出 s (即 &s[0]) 的十六進位制記憶體地址。

或者使用

cout<

你的串號我已經記下,採納後我會幫你製作

6樓:書儒生

陣列在空間表現為連續的一段記憶體,所以二維陣列只是邏輯上的二維;

7樓:匿名使用者

用指標陣列。a[m][n]

int *p[n]=;

n為陣列列數。

c語言指標與陣列問題,c語言陣列與指標相關問題,謝謝

這個問題關鍵在於理解指標為什麼要有型別。其實不同型別的指標本質上都是一樣的,即記憶體地址,地址本身是沒有型別的,賦予指標型別的意義在於給出儲存資料的位元組寬度,也稱資料對齊寬度。比如 int pt,pt是一個整數指標,那麼編譯器便知道如果通過pt讀取資料時需要一次讀取4位元組,因為那裡存放著一個in...

c指標陣列怎麼用,還有指標陣列和陣列指標

名字可能拗口一點。增加一個 的 就好理解了 指標的陣列 和 陣列的指標 指標的陣列 和 整型的陣列 類似,就是指一個陣列,其中每一個元素是指標型別。從陣列中取出一個元素 指標 後,再根據這個元素 指標 的指向地址,對實際的記憶體空間進行操作。陣列的指標 就是指一個陣列的首元素的地址,陣列中儲存的元素...

C指標陣列

1 int p 2 好理解的,指標陣列,p 0 p 1 都是一個指標 2.int p 2 定義指向二維陣列的指標,此二維陣列的第二維必須是2.如當有int p 2 時 int a 3 3 p a 是錯的.int a 3 2 p a 是正確的。同理 int p 3 4 定義指向三維陣列的指標,此三維陣...