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

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>
            欧美午夜精品电影| 欧美在线免费播放| 欧美一区二区三区四区视频 | 亚洲国产综合视频在线观看| 9国产精品视频| 亚洲精选一区二区| 久久偷窥视频| 久久久久综合| 国产精品免费观看在线| 亚洲精选大片| 亚洲免费高清| 欧美二区在线看| 欧美高清视频在线| 亚洲福利国产精品| 久久天天综合| 欧美国产精品中文字幕| 一区二区三区中文在线观看| 小黄鸭精品密入口导航| 欧美在线免费播放| 国产精品一香蕉国产线看观看| 9国产精品视频| 亚洲淫性视频| 国产精品久久久久aaaa| 99热这里只有成人精品国产| 在线视频一区观看| 欧美日韩一级视频| 亚洲校园激情| 欧美有码在线观看视频| 国产视频亚洲| 久久久久.com| 免费欧美在线视频| 亚洲国产另类精品专区 | 欧美精品在线一区| 99精品免费网| 午夜精品久久久久| 国产欧美日韩亚州综合| 久久大逼视频| 欧美国产日韩精品| 亚洲美女精品一区| 欧美日韩在线视频一区| 亚洲在线国产日韩欧美| 久久夜色精品一区| 亚洲激情网站免费观看| 欧美日韩国产一级片| 亚洲一区二区三区精品动漫| 久久久久久夜精品精品免费| 有码中文亚洲精品| 欧美日韩精品免费看 | 一本色道久久综合亚洲精品婷婷| 这里只有精品视频| 国产日韩精品视频一区| 久久综合狠狠| 亚洲视频一区二区| 美女精品在线| 亚洲专区一区| 亚洲承认在线| 国产精品xxxxx| 久久久99精品免费观看不卡| 亚洲激情国产精品| 午夜日韩激情| 亚洲欧洲日本mm| 国产精品色在线| 久久综合精品一区| 亚洲综合激情| 亚洲国产精品va在线观看黑人| 亚洲综合色网站| 悠悠资源网久久精品| 欧美色欧美亚洲另类二区| 久久精品亚洲一区二区| 日韩天堂在线视频| 欧美黑人在线播放| 小黄鸭精品密入口导航| 亚洲精品一二区| 国产亚洲福利社区一区| 欧美日韩一区二区三区在线视频| 久久久久久精| 亚洲欧美日韩国产一区| 亚洲国产另类 国产精品国产免费| 午夜激情一区| 中文在线不卡视频| 亚洲人成网站在线观看播放| 国产亚洲成人一区| 欧美视频免费在线| 欧美国产大片| 久久免费视频网| 久久99在线观看| 亚洲欧美欧美一区二区三区| 亚洲欧洲一区二区三区| 欧美福利视频| 免费欧美日韩国产三级电影| 久久九九国产精品| 性欧美办公室18xxxxhd| 亚洲一区欧美一区| 一区二区三区欧美在线| 亚洲精品男同| 亚洲精品一区二区三区不| 亚洲国产91精品在线观看| 国语对白精品一区二区| 国产专区欧美精品| 国产日韩欧美一区在线| 国产麻豆9l精品三级站| 国产精品久久久久久亚洲毛片| 欧美人与禽猛交乱配| 免费的成人av| 欧美成va人片在线观看| 麻豆91精品| 欧美成人在线影院| 欧美大尺度在线观看| 欧美二区在线播放| 欧美精彩视频一区二区三区| 欧美激情小视频| 欧美美女bbbb| 国产精品国产福利国产秒拍| 欧美日韩一区二区三区免费看 | 国产精品毛片a∨一区二区三区| 欧美日韩美女在线| 欧美午夜电影一区| 国产精品久久国产愉拍| 国产精品视频免费观看www| 国产欧美一区二区三区沐欲| 国产一区二区三区直播精品电影| 黄色亚洲大片免费在线观看| 伊人久久婷婷| 日韩视频在线观看国产| 亚洲视频一区在线| 欧美怡红院视频| 久热综合在线亚洲精品| 亚洲高清视频在线观看| 99视频在线观看一区三区| 亚洲欧美成人综合| 久久精品国产亚洲5555| 欧美国产第一页| 国产精品www| 狠狠综合久久| 日韩一级二级三级| 欧美一区日韩一区| 欧美大片一区二区| 一区二区日韩免费看| 欧美一级午夜免费电影| 牛夜精品久久久久久久99黑人| 欧美精品成人| 国产日韩在线一区二区三区| 亚洲国产成人久久综合一区| 国产精品99久久久久久白浆小说 | 久久天天躁夜夜躁狠狠躁2022| 欧美成人午夜激情在线| 夜夜精品视频| 久久综合伊人77777尤物| 欧美视频在线观看 亚洲欧| 国内成人精品2018免费看 | 久久夜色精品一区| 亚洲免费av电影| 欧美一二三区在线观看| 欧美美女日韩| 一区精品久久| 亚洲欧美网站| 亚洲国产成人高清精品| 亚洲欧美在线看| 欧美乱大交xxxxx| 精品69视频一区二区三区 | 在线视频精品一区| 麻豆精品视频在线观看| 日韩午夜免费| 美女主播一区| 韩国成人精品a∨在线观看| 亚洲一区二区三区免费视频| 蜜桃av噜噜一区二区三区| 亚洲欧美精品suv| 欧美日韩免费区域视频在线观看| 樱桃视频在线观看一区| 欧美一区二区三区日韩| 在线视频亚洲一区| 欧美日韩不卡合集视频| 在线观看亚洲视频啊啊啊啊| 性做久久久久久久免费看| 日韩一级网站| 欧美日韩国产成人精品| 亚洲激情欧美| 免费中文日韩| 久久亚洲不卡| 激情综合网激情| 久久婷婷麻豆| 久久精品盗摄| 国产一区二区三区久久| 久久国产日韩| 先锋影音一区二区三区| 国产乱码精品一区二区三区五月婷 | 在线观看欧美成人| 久久久久久久久久久一区| 亚洲免费在线播放| 国产精品成人一区| 午夜欧美精品| 校园激情久久| 国产综合色精品一区二区三区| 久久国产主播精品| 欧美专区亚洲专区| 今天的高清视频免费播放成人| 久久综合伊人77777| 久久精视频免费在线久久完整在线看| 国语自产精品视频在线看抢先版结局|