關於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++系列】指標物件和物件指標的區別C++指標物件
- c# 呼叫 C++ dll 傳入傳出型別對應說明(轉)C#C++型別
- C++ 指標C++指標
- C++ this 指標C++指標
- 關於C++當中的指標懸空問題C++指標
- 【部落格1】c++測試this指標的傳入及型別C++指標型別
- C++智慧指標C++指標
- C++指標理解C++指標
- C++基於模板實現智慧指標C++指標
- C++編譯器認為的指標型別(靜態聯編)C++編譯指標型別
- C/C++指標總結C++指標
- 關於C與C++的區別C++
- C/C++引用和指標的聯絡和區別C++指標
- 關於int型別數值的運算問題型別
- C++(函式指標)C++函式指標
- C++中的this指標C++指標
- c++ 函式指標C++函式指標
- C++ 學習筆記(3):引用和指標C++筆記指標
- 關於C++的標頭檔案C++
- 詳解c++指標的指標和指標的引用C++指標
- 關於mysql中欄位定義的型別int、tinyint區別MySql型別
- Go: 指標方法與值方法<->指標型別與值型別Go指標型別
- 關於指標指標
- C++進階(智慧指標)C++指標
- C++ 類成員指標C++指標
- 1-7 C++指標C++指標
- 【C++】C++之型別轉換C++型別
- BOOL,int,float,指標型別的變數a 與“零”的比較語句指標型別變數
- 侯捷C++ STL體系結構與原始碼剖析:關於moveable的說明C++原始碼
- int存放到void指標指標
- 我的隨行筆記3 C++ Primer Plus 3--指標筆記C++指標
- C++程式設計開發和指標的關係C++程式設計指標
- C#與C++型別對應關係總結C#C++型別
- [C++] 成員函式指標和函式指標C++函式指標
- c++任意變數型別獲取相關C++變數型別
- C++筆記(11) 智慧指標C++筆記指標
- c++ 智慧指標用法詳解C++指標
- 120 C++中的物件指標C++物件指標