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

glxhyt

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

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

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

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

正確的二維數(shù)組的指針應(yīng)該是:Int a[2][2];Int (*p)[2];//定義時(shí)無論數(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)存所以說,二位數(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,我覺得那個(gè)應(yīng)該是和下面的情況類似把,中間有個(gè)強(qiáng)制轉(zhuǎn)換的過程:

 

#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)換。

    一下是自己遇到問題:

    問題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

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

二維數(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;

這樣就是正確的。

問題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}

上面的結(jié)果都是5,下面的結(jié)果都是4
主要說明的是:
不管是二維數(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,笑一笑,睡覺了
posted on 2011-11-21 23:55 郭龍 閱讀(5627) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   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>
            国产一区二区久久久| 国内一区二区三区| 一区二区三区久久精品| 亚洲国产精品99久久久久久久久| 欧美在线观看日本一区| 国产一区二区三区免费不卡 | 久久久久女教师免费一区| 国产日韩精品一区二区三区在线| 欧美一区网站| 久久精品国语| 亚洲国产精品一区二区久 | 亚洲一二三区在线| 一区二区三区蜜桃网| 国产美女一区二区| 麻豆成人综合网| 欧美刺激午夜性久久久久久久| 99精品国产在热久久下载| 中日韩美女免费视频网址在线观看| 国产精品久久久久久亚洲调教| 久久激情中文| 欧美91视频| 羞羞答答国产精品www一本| 久久成人免费日本黄色| 亚洲美女在线观看| 午夜精品久久久久久99热| 在线免费精品视频| 夜夜狂射影院欧美极品| 一区视频在线| 日韩午夜电影在线观看| 国内精品福利| 夜夜嗨av一区二区三区| 一区在线影院| 亚洲一区在线视频| 亚洲精品日韩激情在线电影| 亚洲一区二区三区四区中文 | 欧美精品免费观看二区| 久久精品久久99精品久久| 欧美成va人片在线观看| 欧美一区二区三区四区视频| 欧美成人综合网站| 久久精品国产综合| 欧美三级日本三级少妇99| 老司机久久99久久精品播放免费| 欧美日韩亚洲一区二区三区在线观看 | 久久黄金**| 亚洲一区二区少妇| 免费av成人在线| 久久国产欧美日韩精品| 欧美日韩一区精品| 欧美激情1区| 国内成人精品一区| 欧美亚洲免费电影| 亚洲欧美国产精品桃花| 欧美高清自拍一区| 欧美电影在线观看完整版| 国产一区二区三区黄视频| 一区二区三区蜜桃网| 99re66热这里只有精品4| 久久综合色婷婷| 久久夜色精品国产欧美乱| 国产欧美视频一区二区三区| 亚洲香蕉伊综合在人在线视看| 日韩一级免费| 欧美另类久久久品| 亚洲国产成人精品久久久国产成人一区 | 亚洲网站在线播放| 99re66热这里只有精品4| 欧美成人dvd在线视频| 欧美α欧美αv大片| 在线欧美亚洲| 老巨人导航500精品| 免费的成人av| 亚洲国产欧美在线| 欧美成人一区二区| 亚洲欧洲精品一区二区三区| 亚洲日本电影| 欧美日韩国产首页在线观看| 最新日韩精品| 亚洲一区国产精品| 国产乱子伦一区二区三区国色天香| 亚洲一区二区在线播放| 欧美诱惑福利视频| 狠狠色噜噜狠狠狠狠色吗综合| 欧美在线国产精品| 亚洲大片在线| 亚洲一区制服诱惑| 国产丝袜一区二区| 久久视频一区二区| 亚洲国产精品一区二区www| 99国产精品久久久久久久久久 | 在线亚洲欧美专区二区| 欧美一区二区日韩一区二区| 国产一区二区三区的电影| 久久午夜精品一区二区| 亚洲三级电影在线观看| 午夜精品www| 亚洲电影网站| 欧美日韩免费高清| 欧美一区激情| 91久久久亚洲精品| 午夜欧美大片免费观看| 狠狠色狠狠色综合| 欧美日韩一区不卡| 久久精品国产久精国产爱| 亚洲国产精选| 久久精品99国产精品| 亚洲激情另类| 国产亚洲a∨片在线观看| 欧美成人四级电影| 欧美一区国产一区| aⅴ色国产欧美| 蜜桃伊人久久| 西瓜成人精品人成网站| 亚洲黄网站黄| 国模一区二区三区| 欧美亚州一区二区三区 | 一区二区三区欧美日韩| 欧美+亚洲+精品+三区| 亚洲女爱视频在线| 亚洲三级视频在线观看| 国内偷自视频区视频综合| 欧美日韩黄视频| 蜜臀av性久久久久蜜臀aⅴ| 午夜精品久久久久99热蜜桃导演| 亚洲区一区二区三区| 久久资源在线| 久久精品夜色噜噜亚洲a∨| 亚洲视频图片小说| 亚洲精品乱码久久久久久蜜桃91 | 欧美肥婆bbw| 久久久亚洲国产美女国产盗摄| 亚洲视频欧美在线| 亚洲精选一区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 91久久精品美女高潮| 国产在线精品成人一区二区三区 | 免费视频一区二区三区在线观看| 香蕉久久夜色| 亚洲欧美激情四射在线日| 99精品国产在热久久| 亚洲日本va午夜在线电影| 欧美岛国激情| 亚洲国产成人精品女人久久久| 麻豆91精品| 裸体女人亚洲精品一区| 久久综合久久综合久久| 久久深夜福利| 久久综合电影| 蜜桃av一区二区三区| 欧美xxxx在线观看| 欧美激情一区二区三区在线视频| 欧美a级一区| 亚洲高清久久网| 亚洲人午夜精品| 在线综合亚洲| 亚洲综合二区| 久久爱91午夜羞羞| 老牛嫩草一区二区三区日本| 久久亚洲私人国产精品va媚药 | 亚洲精品视频免费在线观看| 亚洲精品美女久久7777777| 亚洲精品在线一区二区| 一本一本久久| 午夜免费在线观看精品视频| 欧美在线视屏| 欧美高清视频| 国产精品白丝av嫩草影院| 国产精品专区第二| 在线精品一区| 99爱精品视频| 欧美与黑人午夜性猛交久久久| 久久免费99精品久久久久久| 欧美成人免费全部观看天天性色| 亚洲大片免费看| 国产精品99久久久久久久女警 | 99这里只有精品| 新狼窝色av性久久久久久| 久久免费黄色| 欧美午夜大胆人体| 激情另类综合| 亚洲特黄一级片| 久久久久国产免费免费| 亚洲人成小说网站色在线| 亚洲午夜视频在线| 老色批av在线精品| 国产精品视频大全| 亚洲人成网站精品片在线观看| 亚洲免费在线| 欧美高清hd18日本| 亚洲欧美日韩中文在线制服| 免费观看久久久4p| 国产欧美日韩精品丝袜高跟鞋| 在线看片欧美| 欧美在线播放一区| 亚洲免费观看| 欧美成年人在线观看| 国产欧美亚洲精品| 在线亚洲一区二区| 美女图片一区二区| 亚洲一区精彩视频|