欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C語(yǔ)言二級(jí)指針的作用是什么

這篇文章主要介紹“C語(yǔ)言二級(jí)指針的作用是什么”,在日常操作中,相信很多人在C語(yǔ)言二級(jí)指針的作用是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C語(yǔ)言二級(jí)指針的作用是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站2013年開(kāi)創(chuàng)至今,先為克拉瑪依等服務(wù)建站,克拉瑪依等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為克拉瑪依企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

一、概念

在如下的A指向B、B指向C的指向關(guān)系中:

首先

C是"一段內(nèi)容",比如你用malloc或者new分配了一塊內(nèi)存,然后塞進(jìn)去"一段內(nèi)容",那就是C了。C的起始地址是0x00000008。

B是一個(gè)指針變量,其中存放著C的地址,但是B也要占空間的啊,所以B也有地址,B的起始地址是0x00000004,但是B內(nèi)存中存放的是C的地址,所以B里面的內(nèi)容就是0x00000008。

那么到此為止都比較好理解:
 

 
  1.  

    B= 0x00000008; //B的內(nèi)容  

  2.  

    *B = "一段內(nèi)容"; //B解引用,也就是B指針指向的C的值  

  3.  

    &B = 0x00000004; //B取地址,B的地址是0x00000004  

那么,再來(lái)看A:

A是二級(jí)指針變量,其中存放著B(niǎo)的地址0x00000004,A也有地址,是0x00000000;

 
  1.  

    *A = B= 0x00000008; //A解引用也就是B的內(nèi)容  

  2.  

    **A = *B = "一段內(nèi)容"; //B解引用,也就是B指針指向的C的值  

  3.  

    A = &B = 0x00000004; //A存的是B的地址,B的地址是0x00000004  

  4.  

    &A = 0x00000000; //A取地址  

C語(yǔ)言二級(jí)指針的作用是什么

指向指針的指針即二級(jí)指針保存的是一級(jí)指針的地址,比如:

         p是一級(jí)指針,保存的是a的地址;q是指向指針的指針(二級(jí)指針),保存的是一級(jí)指針(p)的地址;q的內(nèi)容就是0xbfaca770,*q的值即q指向的內(nèi)容0xbfaca776,即*q仍然是一個(gè)地址,也就是指針p的內(nèi)容,即*q=p
 

二、使用

二級(jí)指針作為函數(shù)參數(shù)的作用:在函數(shù)外部定義一個(gè)指針p,在函數(shù)內(nèi)給指針賦值,函數(shù)結(jié)束后對(duì)指針p生效,那么我們就需要二級(jí)指針。

看看下面一段代碼:有兩個(gè)變量a,b,指針q,q指向a,我們想讓q指向b,在函數(shù)里面實(shí)現(xiàn)。

1.先看看一級(jí)指針的實(shí)現(xiàn)

#include<iostream>
using namespace std;
int a= 10;
int b = 100;
int *q;
void func(int *p)
{
cout<<"func:&p="<<&p<<",p="<<p<<endl; //note:3
p = &b;
cout<<"func:&p="<<&p<<",p="<<p<<endl; //note:4
}
int main()
{
cout<<"&a="<<&a<<",&b="<<&b<<",&q="<<&q<<endl; //note:1
q = &a;
cout<<"*q="<<*q<<",q="<<q<<",&q="<<&q<<endl; //note:2
func(q);
cout<<"*q="<<*q<<",q="<<q<<",&q="<<&q<<endl; //note:5
system("pause");
return 0;
}
這么寫(xiě)有什么問(wèn)題?為什么*q不等于100?我們看一下輸出便知:
&a=0032F000,&b=0032F004,&q=0032F228
*q=10,q=0032F000,&q=0032F228
func:&p=0018FD24,p=0032F000
func:&p=0018FD24,p=0032F004
*q=10,q=0032F000,&q=0032F228
我們看輸出:
note:1->a,b,q都有一個(gè)地址.
note:2->q指向a.
note:3->我們發(fā)現(xiàn)參數(shù)p的地址變了,跟q不一樣了,是的參數(shù)傳遞是制作了一個(gè)副本,也就是p和q不是同一個(gè)指針,但是指向的地址0x0032F000(a的地址)還是不變的.
note:4->p重新指向b.
note:5->退出函數(shù),p的修改并不會(huì)對(duì)q造成影響。
結(jié)論:
編譯器總是要為函數(shù)的每個(gè)參數(shù)制作臨時(shí)副本,指針參數(shù)p的副本是 p,編譯器使 p = q(但是&p != &q,也就是他們并不在同一塊內(nèi)存地址,只是他們的內(nèi)容一樣,都是a的地址)。如果函數(shù)體內(nèi)的程序修改了p的內(nèi)容(比如在這里它指向b)。在本例中,p申請(qǐng)了新的內(nèi)存,只是把 p所指的內(nèi)存地址改變了(變成了b的地址,但是q指向的內(nèi)存地址沒(méi)有影響),所以在這里并不影響函數(shù)外的指針q。
這就需要二級(jí)指針操作:
2.二級(jí)指針操作
#include<iostream>
using namespace std;
int a= 10;
int b = 100;
int *q;
void func(int **p) //2
{
cout<<"func:&p="<<&p<<",p="<<p<<endl;
*p = &b; //3
cout<<"func:&p="<<&p<<",p="<<p<<endl;
}
int main()
{
cout<<"&a="<<&a<<",&b="<<&b<<",&q="<<&q<<endl;
q = &a;
cout<<"*q="<<*q<<",q="<<q<<",&q="<<&q<<endl;
func(&q); //1
cout<<"*q="<<*q<<",q="<<q<<",&q="<<&q<<endl;
system("pause");
return 0;
}
這里只改了三個(gè)地方,變成傳二級(jí)指針。我們?cè)倏?
因?yàn)閭髁酥羔榪的地址(二級(jí)指針**p)到函數(shù),所以二級(jí)指針拷貝(拷貝的是p,一級(jí)指針中拷貝的是q所以才有問(wèn)題),(拷貝了指針但是指針內(nèi)容也就是指針?biāo)赶虻牡刂肥遣蛔兊模┧运€是指向一級(jí)指針q(*p = q)。在這里無(wú)論拷貝多少次,它依然指向q,那么*p = &b;自然的就是 q = &b;了。
3.再看一個(gè)例子:
我們代碼中以二級(jí)指針作為參數(shù)比較常見(jiàn)的是,定義了一個(gè)指針MyClass *ptr=NULL,在函數(shù)內(nèi)對(duì)指針賦值*ptr=malloc(...),函數(shù)結(jié)束后指針依然有效.這個(gè)時(shí)候就必須要用二級(jí)指針作為參數(shù)func(MyClass **p,...),一級(jí)指針為什么不行上面說(shuō)了。
void my_malloc(char **s)
{
*s=(char*)malloc(100);
}
void main()
{
char *p=NULL;
my_malloc(&p);
//do something
if(p)
free(p);
}
這里給指針p分配內(nèi)存,do something,然后free(p),如果用一級(jí)指針,那么就相當(dāng)于給一個(gè)p的拷貝s分配內(nèi)存,p依然沒(méi)分配內(nèi)存,用二級(jí)指針之后,才對(duì)p分配了內(nèi)存。

到此,關(guān)于“C語(yǔ)言二級(jí)指針的作用是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

名稱欄目:C語(yǔ)言二級(jí)指針的作用是什么
文章路徑:http://aaarwkj.com/article10/pegjdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站制作、微信公眾號(hào)、微信小程序小程序開(kāi)發(fā)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
日本东京热不卡一区二区| 亚洲一区二区三区不卡视频| 一本之道高清久久久首页| 国产亚洲一区二区三区av| 91欧美日韩在线观看视频| 激情亚洲综合一区二区| 黄色日韩大片在线观看| 欧美国产精品中文字幕| 精品人妻av中文字幕乱| 色婷婷综合激情一区二区| 午夜福利大片在线观看视频| 欧美大片免费在线播放| 久久精品一区二区婷婷| 日本啪啪啪一区二区三区| 亚洲av日韩综合一区尤物| 韩国久久久久三级成人| 色婷婷一区二区三区网站| 亚洲欧美天堂一区二区| 老司机看片午夜久久福利| 国产我和子的乱视频亲生| 国产自拍成人精品视频| 日韩中文字幕资源一区| 精华国产一区二区三区| 有码精品视频在线观看| 国产黄片免费高清观看| 亚洲一区免费在线视频| 粉嫩国产精品一区二区| 国产极品嫩模在线观看91| 国产精品国产三级专区| 日本视频免费一区二区| 亚洲欧美一区二区色慰| 在线观看午夜视频免费| 欧美一级特黄大片做受| 午夜丁香婷婷爽少妇av| 久久精品午夜福利一区| 精品一区二区三区乱码中文| 欧美日韩男女性生活视频| 日韩精品综合成人欧美| 五月婷婷丁香噜噜噜噜| 一区二区三区福利视频在线观看| 国产人妖cd蜜雅丝袜美女|