關於C/C++ int (*t5)[3] 指標型別說明
程式如下:
8 #include<iostream>
9 #include <unistd.h>
10 using namespace std;
11
12
13 int main(void)
14 {
15 unsigned int *t1 = new unsigned int[10];
16 unsigned int t2[3]={1,2,3};
17 unsigned int *t3;
18 short *t4 = new short;
19
20 t3=t2;
21 cout<< "dymic array szie is p t1:"<<sizeof(t1)<<endl;//不能對動態素組進行他返回是指標的大小
22 cout<< "dymic short szie is p t4:"<<sizeof(t4)<<endl;//不能對動態分配short進行sizeof 他返回是指標的大小
23 cout<< "static array size if p t2"<<sizeof(t2)<<endl;
24 cout<< "static array pointer to t2 is p3 "<<sizeof(t3)<<endl;//不能對指向靜態指向的素組使用sizeof他返回是指標的大小
25
26 delete t4;
27 delete [] t1;
28
29 unsigned int (*t5)[3];
30 t5 = &t2;
31 t2+1; //step is 4
32 t5+1; //step is 4*3=12
33
34 sleep(10);
35
36
37 }
我們知道C/C++中陣列的名字是指向陣列第一個元素的指標,確實如此,我們可以*(p+1)來獲取下一個元素
考慮這裡的
29 unsigned int (*t5)[3];
30 t5 = &t2;
31 t2+1; //step is 4
32 t5+1; //step is 4*3=12
unsigned int t2[3]={1,2,3}; 是一個素組,那麼t2是陣列的名稱也是他的首地址
t5 = &t2;如果解釋呢其實如果我們這裡將t2作為素組的名稱,那麼&t2就是素組
的起始位置,他和t2視乎有相同的地址,但是
t2+1
t5+1
他們的步長不同前者是4 後者這是這個素組的長度4*3
那麼我們如何宣告t5這種型別的指標,起始就是 int (*t5)[3];
他表明t5是一個指向3個int元素陣列的首地址的指標。
可以用GDB進行除錯
(gdb) p t2+1
$1 = (unsigned int *) 0x7fffffffea14
(gdb) p &t2
$2 = (unsigned int (*)[3]) 0x7fffffffea10
(gdb) p t5+1
$3 = (unsigned int (*)[3]) 0x7fffffffea1c
(gdb)
是不是看得很清楚 &t2為0x7fffffffea10 t2+1為0x7fffffffea14 t5+1為0x7fffffffea1c
8 #include<iostream>
9 #include <unistd.h>
10 using namespace std;
11
12
13 int main(void)
14 {
15 unsigned int *t1 = new unsigned int[10];
16 unsigned int t2[3]={1,2,3};
17 unsigned int *t3;
18 short *t4 = new short;
19
20 t3=t2;
21 cout<< "dymic array szie is p t1:"<<sizeof(t1)<<endl;//不能對動態素組進行他返回是指標的大小
22 cout<< "dymic short szie is p t4:"<<sizeof(t4)<<endl;//不能對動態分配short進行sizeof 他返回是指標的大小
23 cout<< "static array size if p t2"<<sizeof(t2)<<endl;
24 cout<< "static array pointer to t2 is p3 "<<sizeof(t3)<<endl;//不能對指向靜態指向的素組使用sizeof他返回是指標的大小
25
26 delete t4;
27 delete [] t1;
28
29 unsigned int (*t5)[3];
30 t5 = &t2;
31 t2+1; //step is 4
32 t5+1; //step is 4*3=12
33
34 sleep(10);
35
36
37 }
我們知道C/C++中陣列的名字是指向陣列第一個元素的指標,確實如此,我們可以*(p+1)來獲取下一個元素
考慮這裡的
29 unsigned int (*t5)[3];
30 t5 = &t2;
31 t2+1; //step is 4
32 t5+1; //step is 4*3=12
unsigned int t2[3]={1,2,3}; 是一個素組,那麼t2是陣列的名稱也是他的首地址
t5 = &t2;如果解釋呢其實如果我們這裡將t2作為素組的名稱,那麼&t2就是素組
的起始位置,他和t2視乎有相同的地址,但是
t2+1
t5+1
他們的步長不同前者是4 後者這是這個素組的長度4*3
那麼我們如何宣告t5這種型別的指標,起始就是 int (*t5)[3];
他表明t5是一個指向3個int元素陣列的首地址的指標。
可以用GDB進行除錯
(gdb) p t2+1
$1 = (unsigned int *) 0x7fffffffea14
(gdb) p &t2
$2 = (unsigned int (*)[3]) 0x7fffffffea10
(gdb) p t5+1
$3 = (unsigned int (*)[3]) 0x7fffffffea1c
(gdb)
是不是看得很清楚 &t2為0x7fffffffea10 t2+1為0x7fffffffea14 t5+1為0x7fffffffea1c
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2090211/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於C/C++ void指標,使用void指標拷貝int 陣列C++指標陣列
- 【C++ Primer(7)】auto型別說明符C++型別
- C/C++標頭檔案說明C++
- 關於C++列舉型別C++型別
- C#指標型別C#指標型別
- c指標型別的作用指標型別
- c++ 中關於int,unsigned int , short的關係與應用C++
- C++ this 指標C++指標
- C++ 指標C++指標
- 關於C++當中的指標懸空問題C++指標
- c# 呼叫 C++ dll 傳入傳出型別對應說明(轉)C#C++型別
- C++指標與引用的區別C++指標
- C/C++指向指標的指標C++指標
- 【C++系列】指標物件和物件指標的區別C++指標物件
- C++指標理解C++指標
- 【c++】智慧指標C++指標
- C++智慧指標C++指標
- 關於C/C++ const變數 const指標 以及C++ 引用變數的解析C++變數指標
- C/C++——基本資料型別的大小並且sizeof(int *) = 8C++資料型別
- 《C++ Primer》 ---- 關於變數 與 基本型別C++變數型別
- Dump型別說明型別
- C++基於模板實現智慧指標C++指標
- C++ 指標陣列與陣列指標的區別C++指標陣列
- C++編譯器認為的指標型別(靜態聯編)C++編譯指標型別
- C/C++指標總結C++指標
- C++中的this指標C++指標
- c++ 函式指標C++函式指標
- C++引用和指標C++指標
- C++指標轉換C++指標
- C++指標問題C++指標
- 「C++」理解智慧指標C++指標
- c++指標小計C++指標
- C++(函式指標)C++函式指標
- C++入門解惑(3)——初探指標(下) (轉)C++指標
- 再學C/C++ 之 指標常量 和 常量指標C++指標
- 關於int型別數值的運算問題型別
- 關於C與C++的區別C++
- 關於指標指標