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

glxhyt

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  15 隨筆 :: 0 文章 :: 4 評(píng)論 :: 0 Trackbacks
    入職一年了,這一年自己學(xué)到許多,但是忘記也很多,于是決定定下心來(lái)整理以前學(xué)到的,并且繼續(xù)學(xué)習(xí)
    
    二維數(shù)組和二級(jí)指針,這真是頭疼的問(wèn)題,困擾了我好幾次,
   
    先轉(zhuǎn)一下wanpengcoder的二維數(shù)組和二級(jí)指針

前兩天寫個(gè)程序,傳參數(shù)的時(shí)候想傳個(gè)二維數(shù)組進(jìn)去,結(jié)果悲劇了,函數(shù)寫成Fun (int **p){},原來(lái)沒(méi)有這么寫過(guò),

以為這么寫也是對(duì)的,結(jié)果錯(cuò)了,查了些資料,做個(gè)總結(jié)。

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

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

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

int **p=(int**)a;//強(qiáng)制將二維數(shù)組指針轉(zhuǎn)為指向指針的指針

則此時(shí)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);

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

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

對(duì)于p[1][0]=*(1),p[1][1]=*(5),均引用了非法內(nèi)存所以說(shuō),二位數(shù)組并不能簡(jiǎn)單的轉(zhuǎn)換成指向指針的指針。

二維數(shù)組其實(shí)只是一個(gè)指針,而二級(jí)指針是指向指針的指針,所以二者并不等價(jià)。如上例所示:int a[2][2];

a是指向整個(gè)數(shù)組的首地址,并不是int **;所以不要指望向函數(shù)fun里面?zhèn)鲗?shí)參 p=a;

 

感謝sld666666,我覺(jué)得那個(gè)應(yīng)該是和下面的情況類似把,中間有個(gè)強(qiáng)制轉(zhuǎn)換的過(guò)程:

 

#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程序設(shè)計(jì)語(yǔ)言>中的關(guān)于這個(gè)的解釋:

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" };


//我的理解是,當(dāng)是指針數(shù)組的時(shí)候,可以直接傳,如果是普通的二維數(shù)組的話應(yīng)該就進(jìn)行上面的轉(zhuǎn)換。

    一下是自己遇到問(wèn)題:

    問(wèn)題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

最終通過(guò)上面藍(lán)色部分找到了到了答案,簡(jiǎn)單的說(shuō)就是

二維數(shù)組其實(shí)只是一個(gè)指針,而

二級(jí)指針是指向指針的指針,所以二者并不等價(jià)。

 

但是可以強(qiáng)轉(zhuǎn)

如:

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;

這樣就是正確的。

問(wèn)題2:
下面的問(wèn)題:很有意思

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}

上面的結(jié)果都是5,下面的結(jié)果都是4
主要說(shuō)明的是:
不管是二維數(shù)組,還是一維數(shù)組
數(shù)組的首地址取地址+1,增加整個(gè)數(shù)組的長(zhǎng)度;
如上面的例子:

    3:注意函數(shù)傳遞,指針,引用

    在指針引用&*,**的時(shí)候是改變的指針,這個(gè)一般主要是里面涉及到內(nèi)存分配,
    或者獲取的是靜態(tài)區(qū)域,或者是全局的區(qū)域,傳遞的時(shí)候一般都是傳,空指針。

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

     快0:00,笑一笑,睡覺(jué)了
posted on 2011-11-21 23:55 郭龍 閱讀(5621) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲高清不卡在线观看| 亚洲在线观看视频| 久久久精品一区| 欧美在线视频a| 一区在线免费观看| 男人的天堂亚洲在线| 老司机一区二区三区| 亚洲精品免费一二三区| 91久久精品网| 国产精品捆绑调教| 久久精品日韩欧美| 老司机一区二区| 宅男噜噜噜66一区二区| 亚洲欧美日韩国产一区二区| 韩日成人在线| 亚洲清纯自拍| 国产欧美一区视频| 欧美电影打屁股sp| 国产精品高清一区二区三区| 久久久国产午夜精品| 亚洲毛片一区| 亚洲自拍啪啪| 亚洲黄色免费电影| 亚洲欧美高清| 亚洲精品国精品久久99热| 在线视频日本亚洲性| 狠色狠色综合久久| 一区二区三区视频免费在线观看| 国产亚洲欧美激情| 亚洲精品久久嫩草网站秘色| 国产欧美一区二区三区久久人妖 | 亚洲电影中文字幕| 一区二区欧美视频| 亚洲国产老妈| 欧美亚洲色图校园春色| 一区二区三欧美| 久久久久久网址| 欧美一区日韩一区| 欧美性jizz18性欧美| 亚洲大片av| 国产一区深夜福利| 一区二区三区波多野结衣在线观看| 精品av久久707| 亚洲欧美日韩综合国产aⅴ| 日韩午夜激情电影| 免费的成人av| 免费观看成人| 狠狠色丁香婷婷综合久久片| 亚洲自啪免费| 亚洲欧美一区二区原创| 欧美日韩在线一区| 日韩亚洲欧美在线观看| 日韩视频―中文字幕| 美女久久网站| 欧美黄在线观看| 亚洲第一区在线观看| 欧美资源在线| 久久精品国产亚洲一区二区| 国产精品进线69影院| 日韩天堂在线观看| 亚洲网友自拍| 国产精品magnet| 中文高清一区| 午夜亚洲激情| 国产精品综合久久久| 亚洲一线二线三线久久久| 亚洲欧美精品| 国产精品毛片一区二区三区| 一区二区三区视频免费在线观看| 亚洲一区二区成人| 国产精品成人免费| 亚洲欧美视频一区| 久久久爽爽爽美女图片| 红桃视频国产精品| 欧美91大片| 日韩午夜在线| 午夜精品福利视频| 国产一区二区三区奇米久涩| 欧美在线播放一区二区| 欧美岛国激情| 亚洲社区在线观看| 国产午夜亚洲精品不卡| 久久色在线观看| 欧美日韩亚洲视频一区| 夜夜夜精品看看| 欧美专区在线| …久久精品99久久香蕉国产| 欧美岛国激情| 一区二区日韩精品| 久久久久久自在自线| 亚洲欧洲精品成人久久奇米网| 欧美精品一区二区三区视频| 亚洲无人区一区| 久久精品中文字幕一区| 亚洲福利久久| 欧美α欧美αv大片| 在线视频欧美日韩精品| 美女爽到呻吟久久久久| 亚洲视频碰碰| 樱花yy私人影院亚洲| 欧美日韩高清不卡| 久久爱另类一区二区小说| 久久综合伊人77777| 亚洲韩国精品一区| 国产精品成人免费视频| 午夜精品久久久久久久| 久久国产精品久久久| 亚洲免费精彩视频| 国产综合av| 国产精品成人v| 久久影院午夜论| 午夜一区二区三视频在线观看 | 亚洲高清不卡| 国产精品嫩草影院一区二区| 久久只精品国产| 亚洲欧美另类在线观看| 99re视频这里只有精品| 欧美r片在线| 久久久久久久97| 亚洲视频一起| 日韩视频免费观看| 亚洲电影免费在线 | 国产欧美精品在线播放| 欧美激情一区二区三区在线视频观看 | 亚洲午夜高清视频| 亚洲韩日在线| 一区二区三区在线视频免费观看| 国产精品久久久久永久免费观看 | 欧美亚洲三级| 亚洲欧美日韩精品久久久| aⅴ色国产欧美| 亚洲九九九在线观看| 亚洲电影下载| 欧美国产日韩亚洲一区| 欧美1区视频| 免费观看一区| 欧美成人蜜桃| 牛夜精品久久久久久久99黑人| 久久久久久久999精品视频| 午夜久久福利| 欧美有码在线视频| 欧美一区二区视频观看视频| 亚洲制服少妇| 欧美在线看片| 久久久精品动漫| 久久精品日韩欧美| 免播放器亚洲一区| 欧美大片免费| 亚洲日本中文| 日韩一本二本av| 亚洲一区二区三区精品视频| 一区二区三区黄色| 亚洲尤物视频网| 欧美一区二区三区免费大片| 久久超碰97人人做人人爱| 久久伊伊香蕉| 欧美日韩国产高清| 国产精品一区免费在线观看| 国产亚洲精品aa| 在线观看日韩av| 亚洲九九精品| 亚洲欧美另类中文字幕| 亚洲午夜电影网| 久久riav二区三区| 亚洲永久字幕| 久久久久国产一区二区三区| 欧美成人精品影院| 亚洲免费av片| 欧美一区激情视频在线观看| 久久午夜电影| 欧美日本在线一区| 欧美午夜精品久久久久久浪潮| 国产亚洲女人久久久久毛片| 亚洲精品免费一二三区| 亚洲欧美精品| 欧美大片免费| 亚洲欧美日韩一区二区| 欧美国产一区视频在线观看| 欧美午夜精品一区| 激情综合在线| 亚洲一区二区动漫| 美女91精品| 亚洲婷婷综合色高清在线| 久久一区国产| 国产精品一区二区黑丝| 亚洲电影成人| 久久成人免费电影| 亚洲人成毛片在线播放女女| 午夜久久福利| 欧美日韩一区二区高清| 伊人久久av导航| 亚洲一区精彩视频| 亚洲国产精品va在看黑人| 亚洲性视频网站| 欧美精品午夜视频| 亚洲国产另类 国产精品国产免费| 欧美一级大片在线观看| 亚洲黑丝在线| 美女日韩在线中文字幕| 国产人久久人人人人爽|