青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

glxhyt

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  15 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks
    入職一年了,這一年自己學到許多,但是忘記也很多,于是決定定下心來整理以前學到的,并且繼續學習
    
    二維數組和二級指針,這真是頭疼的問題,困擾了我好幾次,
   
    先轉一下wanpengcoder的二維數組和二級指針

前兩天寫個程序,傳參數的時候想傳個二維數組進去,結果悲劇了,函數寫成Fun (int **p){},原來沒有這么寫過,

以為這么寫也是對的,結果錯了,查了些資料,做個總結。

Fun (int **p){}這里面的int **p //這里的p不是二維數組的指針,而是指向指針的指針,即二級指針。

正確的二維數組的指針應該是:Int a[2][2];Int (*p)[2];//定義時無論數組維數,只可忽略第一維

例如:int a[2][2]={0,1,2,3};

int **p=(int**)a;//強制將二維數組指針轉為指向指針的指針

則此時p[0]=0;p[1]=1;p[2]=2;p[3]=3;

而p[0][0]=*(*(p+0)+0)=**p;

p[0][1]=*(*(p+0)+1);

對于p[0][0]:由于*p=0; ====> **p=*(0);引用地址為零的內存,必然是錯誤的。

對于p[0][1]=*(*p+1)====>*(4),引用了非法內存同樣,

對于p[1][0]=*(1),p[1][1]=*(5),均引用了非法內存所以說,二位數組并不能簡單的轉換成指向指針的指針。

二維數組其實只是一個指針,而二級指針是指向指針的指針,所以二者并不等價。如上例所示:int a[2][2];

a是指向整個數組的首地址,并不是int **;所以不要指望向函數fun里面傳實參 p=a;

 

感謝sld666666,我覺得那個應該是和下面的情況類似把,中間有個強制轉換的過程:

 

#include <iostream>

 

void fun(char ** p)

{

char (*p1)[10] = (char(*)[10])p;

std::cout<<p1[0][0]<<std::endl;

}

 

int main(int argc, char* argv[])

{

char data[][10] = {"abc","def"};

fun((char **)data);

return 0;

}

----------------------------------------------------------------華麗的分割線---------------------------------------------------------------------------------------------------------------------------

 

<c程序設計語言>中的關于這個的解釋:

Newcomers to C are sometimes confused about the difference between a two-dimensional array and an array of pointers, such as name in the example above. Given the definitions

int a[10][20];

int *b[10];

then a[3][4] and b[3][4] are both syntactically legal references to a single int. But a is a true two-dimensional array: 200 int-sized locations have been set aside, and the conventional rectangular subscript calculation 20 * row +col is used to find the element a[row,col]. For b, however, the definition only allocates 10 pointers and does not initialize them; initialization must be done explicitly, either statically or with code. Assuming that each element of b does point to a twenty-element array, then there will be 200 ints set aside, plus ten cells for the pointers. The important advantage of the pointer array is that the rows of the array may be of different lengths. That is, each element of b need not point to a twenty-element vector; some may point to two elements, some to fifty, and some to none at all.

Although we have phrased this discussion in terms of integers, by far the most frequent use of arrays of pointers is to store character strings of diverse lengths, as in the function month_name. Compare the declaration and picture for an array of pointers:

char *name[] = { "Illegal month", "Jan", "Feb", "Mar" };?

with those for a two-dimensional array:

char aname[][15] = { "Illegal month", "Jan", "Feb", "Mar" };


//我的理解是,當是指針數組的時候,可以直接傳,如果是普通的二維數組的話應該就進行上面的轉換。

    一下是自己遇到問題:

    問題1:

 1#include "stdafx.h"
 2
 3#include <iostream>
 4using namespace std;
 5
 6
 7typedef struct tagNode_st
 8{
 9 char m_acData[10];
10 int m_iNo;
11}
Node_st;
12
13Node_st Root;
14
15int Fun(Node_st ** pst)
16{
17//Error
18#if 0
19 Node_st astNodeA[2= {{"xiaowang"1}{"xiaoming"2}};
20#else
21 static Node_st astNodeA[2= {{"xiaowang1"1}{"xiaoming1"1}}
22#endif
23 //static Node_st astNodeB[2] = {{"xiaowang2", 2}, {"xiaoming2", 2}}; 
24//static Node_st astNodeC[2] = {{"xiaowang3", 3}, {"xiaoming3", 3}}; 
25*pst = astNodeA;
26
27 return 0;
28}

29
30int _tmain(int argc, _TCHAR* argv[])
31{
32 Node_st st[2][2];
33
34 //TypeA
35 Fun((Node_st**)st);
36   //1.error
37 cout<<st[0][0].m_acData<<endl;
38 cout<<st[0][0].m_iNo<<endl<<endl;
39
40 //2.error
41 cout<<(*st)->m_acData<<endl;
42 cout<<(*st)->m_iNo<<endl<<endl;
43
44 //3.right
45 cout<<(*(Node_st**)st)->m_acData<<endl;
46 cout<<(*(Node_st**)st)->m_iNo<<endl<<endl;
47
48 //Typde B
49 Node_st *pstTemp[2= {&st[0][0], &st[1][0]};
50 Fun(&pstTemp[0]);
51 //Right
52 cout<<(pstTemp[0])->m_acData<<endl;
53 cout<<(pstTemp[0])->m_iNo<<endl<<endl;
54
55 //Error
56 cout<<(st[0][0]).m_acData<<endl;
57 cout<<(st[0][0]).m_iNo<<endl<<endl;
58
59 //Right
60 cout<<(*(Node_st**)st)->m_acData<<endl;
61 cout<<(*(Node_st**)st)->m_iNo<<endl<<endl;
62
63 //Typde C
64
65 Node_st *pstTemp2[2= {NULL, NULL};
66 Fun(&pstTemp2[0]);
67 //Right
68 cout<<(pstTemp2[0])->m_acData<<endl;
69 cout<<(pstTemp2[0])->m_iNo<<endl<<endl;
70
71 return 0;
72}

73

最終通過上面藍色部分找到了到了答案,簡單的說就是

二維數組其實只是一個指針,而

二級指針是指向指針的指針,所以二者并不等價。

 

但是可以強轉

如:

1 int iaArray[2][2= {1124};
2 
3 int **= (int**)iaArray;
4 
5 for (int i = 0; i < 4++ i)
6 {
7  cout<<"i:"<<i<<" "<<q[i]<<endl;
8 }

9

 和:
1 int iaArrayTemp[5] = {1, 2, 3, 4, 5};
2 int **p = (int**)&iaArrayTemp;
3 p++;
4 cout<<*p<<endl;

這樣就是正確的。

問題2:
下面的問題:很有意思

1#include <iostream>
2using namespace std;
3
4int main()
5{
6 int iaArray[5] = {1, 2, 3, 4, 5};
7
8#if 0
9
10 int *p = (int*)(&iaArray+1)-1;
11 cout<<*p<<endl;
12
13 int *q = (int*)(&iaArray+1);
14 cout<<*(q-1)<<endl;
15
16 int **qq = (int**)(&iaArray+1);
17 cout<<*(qq-1)<<endl;
18
19#else
20 int iaAry[2][2] = {1, 2, 3, 4};
21
22 int *p = (int*)(&iaAry+1)-1;
23 cout<<*p<<endl;
24
25 int *q = (int*)(&iaAry+1);
26 cout<<*(q-1)<<endl;
27
28 int **qq = (int**)(&iaAry+1);
29 cout<<*(qq-1)<<endl;
30#endif
31 return 0;
32}

上面的結果都是5,下面的結果都是4
主要說明的是:
不管是二維數組,還是一維數組
數組的首地址取地址+1,增加整個數組的長度;
如上面的例子:

    3:注意函數傳遞,指針,引用

    在指針引用&*,**的時候是改變的指針,這個一般主要是里面涉及到內存分配,
    或者獲取的是靜態區域,或者是全局的區域,傳遞的時候一般都是傳,空指針。

     傳遞*,&,是改變的數組的值。一般都是傳遞的是非空的,一般要再函數中增加
      assert(NULL != p);
    
     4.const ,Enum,static const ...待續

     快0:00,笑一笑,睡覺了
posted on 2011-11-21 23:55 郭龍 閱讀(5621) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久免费| 美女在线一区二区| 麻豆成人在线播放| 欧美在线短视频| 在线观看亚洲视频| 久久综合九色综合欧美就去吻| 久久久www成人免费无遮挡大片 | 你懂的视频一区二区| 精品91免费| 亚洲区国产区| 欧美日韩一区免费| 午夜精品久久久久久久久| 新狼窝色av性久久久久久| 亚洲高清不卡在线| 亚洲精品中文字| 国产一二三精品| 亚洲第一搞黄网站| 欧美无砖砖区免费| 久久亚洲私人国产精品va媚药| 欧美 日韩 国产在线| 亚洲小视频在线| 性伦欧美刺激片在线观看| 亚洲国产成人不卡| 亚洲精品欧洲精品| 国产视频一区在线观看一区免费| 欧美大片第1页| 欧美视频免费在线观看| 久久综合给合久久狠狠狠97色69| 欧美国产精品人人做人人爱| 久久国产精品亚洲77777| 欧美大片免费久久精品三p| 久久狠狠婷婷| 欧美日韩午夜精品| 欧美xx视频| 国产精品美女xx| 亚洲电影天堂av| 国产偷国产偷亚洲高清97cao| 亚洲日本aⅴ片在线观看香蕉| 国产一区二区三区久久久久久久久 | 亚洲美女免费精品视频在线观看| 午夜精品久久久久久久蜜桃app | 夜夜爽99久久国产综合精品女不卡 | 亚洲一区日本| 欧美成人国产一区二区| 久久久亚洲国产天美传媒修理工 | 噜噜噜在线观看免费视频日韩| 久久gogo国模啪啪人体图| 欧美三级电影精品| 亚洲大片在线观看| 亚洲第一福利在线观看| 欧美一级视频| 欧美一区二区性| 亚洲国产视频a| 亚洲国产美女久久久久| 久久久国产精品亚洲一区| 午夜精品国产更新| 欧美色精品天天在线观看视频| 欧美第十八页| 91久久视频| 老司机午夜精品视频| 免费亚洲网站| 最新成人在线| 欧美激情一区二区三区蜜桃视频| 欧美第一黄网免费网站| 亚洲国产婷婷| 欧美成人一品| 亚洲精品一级| 亚洲综合色激情五月| 国产精品久久久久9999| 亚洲一区二区三区免费视频| 亚洲综合三区| 国产专区精品视频| 久久av资源网| 男人的天堂成人在线| 亚洲人成网站999久久久综合| 欧美电影美腿模特1979在线看 | 久久先锋影音| 亚洲国产日韩欧美在线动漫| 欧美成人情趣视频| 日韩天天综合| 久久黄色影院| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美日韩一区二区三区四区在线观看 | 亚洲人成在线观看一区二区| 欧美精品日韩一本| 亚洲色无码播放| 久久久综合网| 亚洲精品少妇网址| 国产精品免费福利| 久久亚洲综合| 亚洲免费观看高清在线观看 | 香蕉成人啪国产精品视频综合网| 国内精品福利| 欧美啪啪成人vr| 午夜精品久久久久久99热| 毛片av中文字幕一区二区| 亚洲精品视频一区| 国产精品欧美日韩久久| 久色婷婷小香蕉久久| 一区二区三区免费观看| 美女黄毛**国产精品啪啪| aⅴ色国产欧美| 国产日韩一区二区三区| 欧美精品一区二区三| 亚洲欧美日韩综合| 亚洲国产精品一区二区久| 亚洲综合日韩中文字幕v在线| 在线电影国产精品| 欧美三级特黄| 噜噜噜91成人网| 亚欧美中日韩视频| 夜夜夜精品看看| 欧美国产日本高清在线| 欧美成人午夜激情在线| 午夜精品在线| 亚洲另类在线一区| 免费一级欧美在线大片| 午夜精品剧场| 99热在线精品观看| 在线观看精品视频| 国产精品vvv| 欧美乱大交xxxxx| 久久亚洲免费| 久久精品免费| 欧美一区二区视频在线观看| 日韩视频一区二区在线观看| 欧美国产专区| 久热精品在线视频| 亚洲欧美日韩精品久久奇米色影视| 亚洲人成网站精品片在线观看| 激情久久久久久久| 国产三级欧美三级日产三级99| 欧美午夜在线一二页| 欧美日本视频在线| 欧美精品日韩三级| 欧美精品久久天天躁| 欧美粗暴jizz性欧美20| 久久综合综合久久综合| 久久中文字幕导航| 久久视频在线视频| 久久久亚洲欧洲日产国码αv| 久久超碰97中文字幕| 香港成人在线视频| 久久er99精品| 久久久久国产精品一区| 久久久久国色av免费观看性色| 欧美在线观看一区二区| 欧美一区二区成人| 久久精品欧美| 免费久久精品视频| 欧美久久一区| 欧美四级伦理在线| 国产精品永久免费在线| 国产日韩在线视频| 影院欧美亚洲| 亚洲精品国产品国语在线app| 亚洲免费成人| 亚洲综合国产| 久久av一区二区三区亚洲| 久久久久国产精品厨房| 欧美波霸影院| 最新中文字幕一区二区三区| 亚洲免费久久| 亚洲欧美伊人| 美女久久一区| 欧美视频不卡中文| 国产视频一区二区在线观看 | 一区二区在线免费观看| 亚洲国产精品嫩草影院| 99re6热在线精品视频播放速度| 亚洲少妇自拍| 欧美专区亚洲专区| 麻豆成人在线观看| 日韩小视频在线观看| 午夜在线观看欧美| 欧美国产乱视频| 国产麻豆91精品| 亚洲欧洲一区二区三区久久| 亚洲欧洲99久久| 欧美成年网站| 一区二区日韩伦理片| 久久久久久亚洲精品杨幂换脸| 欧美激情视频在线播放| 国产视频综合在线| 一区电影在线观看| 久久久久久久久蜜桃| 亚洲精品一区二| 久久久久久夜| 国产精品男人爽免费视频1| 亚洲国产精品久久人人爱蜜臀| 午夜精品网站| 影音先锋亚洲电影| 亚洲欧美精品一区| 亚洲高清在线精品| 久久精品国产精品亚洲| 国产精品美女在线观看| 一本高清dvd不卡在线观看| 免费看av成人| 久久九九精品99国产精品| 国产精品ⅴa在线观看h|