日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

我想要一种语言,只需对它说我要干什么就行

發(fā)布時(shí)間:2024/8/23 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我想要一种语言,只需对它说我要干什么就行 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C語(yǔ)言是20 世紀(jì)70 年代初期在貝爾實(shí)驗(yàn)室開(kāi)發(fā)出來(lái)的一種廣為使用的編程語(yǔ)言。指針是 C 語(yǔ)言最重要,也是最常被誤解的特性之一。讓我們一起了解一下指針的基礎(chǔ)知識(shí)吧。

>>>>

1.指針變量

理解指針的第一步是在機(jī)器級(jí)上觀察指針表示的內(nèi)容。大多數(shù)現(xiàn)代計(jì)算機(jī)將內(nèi)存分割為字節(jié)(byte),每個(gè)字節(jié)可以存儲(chǔ)8位的信息。

每個(gè)字節(jié)都有唯一的地址(address),用來(lái)和內(nèi)存中的其他字節(jié)相區(qū)別。如果內(nèi)存中有n個(gè) 字節(jié),那么可以把地址看作0~n-1的數(shù)。

? 地址???內(nèi)容

可執(zhí)行程序由代碼(原始C程序中與語(yǔ)句對(duì)應(yīng)的機(jī)器指令)和數(shù)據(jù)(原始程序中的變量)兩部分構(gòu)成。程序中的每個(gè)變量占有一個(gè)或多個(gè)字節(jié)內(nèi)存,把第一個(gè)字節(jié)的地址稱為變量的地址。下圖中,變量i占有地址為2000和2001的兩個(gè)字節(jié),所以變量i的地址是2000:

這就是指針的出處。雖然用數(shù)表示地址,但是地址的取值范圍可能不同于整數(shù)的范圍,所以一定不能用普通整型變量存儲(chǔ)地址。但是,可以用特殊的指針變量(pointervariable)存儲(chǔ)地址。在用指針變量p存儲(chǔ)變量i的地址時(shí),我們說(shuō)p“指向”i。Q&A換句話說(shuō),指針就是地址,而指針變量就是存儲(chǔ)地址的變量。

這里不再把地址顯示為數(shù),而是采用更加簡(jiǎn)單的標(biāo)記。為了說(shuō)明指針變量p存儲(chǔ)變量i的地址,把p的內(nèi)容顯示為指向i的箭頭:

指針變量的聲明

對(duì)指針變量的聲明與對(duì)普通變量的聲明基本一樣,唯一的不同就是必須在指針變量名字前放置星號(hào):

int*p;

上述聲明說(shuō)明p是指向int類型對(duì)象的指針變量。這里我們用術(shù)語(yǔ)對(duì)象來(lái)代替變量,是因?yàn)閜可以指向不屬于變量的內(nèi)存區(qū)域。

指針變量可以和其他變量一起出現(xiàn)在聲明中:

inti,j,a[10],b[20],*p,*q;

在這個(gè)例子中,i和j都是普通整型變量,a和b是整型數(shù)組,而p和q是指向整型對(duì)象的指針。

C語(yǔ)言要求每個(gè)指針變量只能指向一種特定類型(引用類型)的對(duì)象:

int*p;/*pointsonlytointegers*/double*q;/*pointsonlytodoubles*/char*r; ?/*pointsonlytocharacters*/

至于引用類型是什么類型則沒(méi)有限制。事實(shí)上,指針變量甚至可以指向另一個(gè)指針,即指向指針的指針。

?

?

2.取地址運(yùn)算符和間接尋址運(yùn)算符

為使用指針,C語(yǔ)言提供了一對(duì)特殊設(shè)計(jì)的運(yùn)算符。為了找到變量的地址,可以使用&(取地址)運(yùn)算符。如果x是變量,那么&x就是x在內(nèi)存中的地址。為了獲得對(duì)指針?biāo)赶驅(qū)ο蟮脑L問(wèn),可以使用*(間接尋址)運(yùn)算符。如果p是指針,那么*p表示p當(dāng)前指向的對(duì)象。

?

取地址運(yùn)算符

聲明指針變量是為指針留出空間,但是并沒(méi)有把它指向?qū)ο?#xff1a;

int*p;??? /*pointsnowhereinparticular*/

在使用前初始化p是至關(guān)重要的。一種初始化指針變量的方法是使用&運(yùn)算符把某個(gè)變量的地址賦給它,或者更常采用左值:

inti,*p;

...

p=&i;

通過(guò)把i的地址賦值給變量p的方法,上述語(yǔ)句把p指向了i:

?

?????????? ? ? ? ? ? ? ? ? ? ? ? ?

Q&A:在聲明指針變量的同時(shí)對(duì)它進(jìn)行初始化是可行的:

inti;

int*p=&i;

甚至可以把i的聲明和p的聲明合并,但是需要首先聲明i:

inti,*p=&i;

間接尋址運(yùn)算符

一旦指針變量指向了對(duì)象,就可以使用*運(yùn)算符訪問(wèn)存儲(chǔ)在對(duì)象中的內(nèi)容。例如,如果p

指向i,那么可以顯示出i的值,如下所示:

printf("%d\n",*p);

Q&A printf函數(shù)將顯示i的值,而不是i的地址。習(xí)慣于數(shù)學(xué)思維的讀者可能希望把*想象成&的逆運(yùn)算。對(duì)變量使用&運(yùn)算符產(chǎn)生指向變量

的指針,而對(duì)指針使用*運(yùn)算符則可以返回到原始變量:

j=*&i;???? /*sameasj=i;*/

只要p指向i,*p就是i的別名。*p不僅擁有和i相同的值,而且對(duì)*p的改變也會(huì)改變i的值。(*p是左值,所以對(duì)它賦值是合法的。)下面的例子說(shuō)明了*p和i的等價(jià)關(guān)系,這些圖 顯示了在計(jì)算中不同的點(diǎn)上p和i的值。

p=&i;

?

i=1;

printf("%d\n",i); ->? /*prints1*

/printf("%d\n",*p); -> ?/*prints1*/

*p=2;

?

?

printf("%d\n",i);?->?/*prints2*

/printf("%d\n",*p);??->??/*prints2*/

?

注意

不要把間接尋址運(yùn)算符用于未初始化的指針變量。如果指針變量p沒(méi)有初始化,那么試圖

使用p的值會(huì)導(dǎo)致未定義的行為:

int*p;

printf("%d",*p);/***WRONG***/?

給*p賦值尤其危險(xiǎn)。如果p恰好具有有效的內(nèi)存地址,下面的賦值會(huì)試圖修改存儲(chǔ)在該地址的數(shù)據(jù):

int*p;

*p=1;/***WRONG***/?

如果上述賦值改變的內(nèi)存單元屬于該程序,那么可能會(huì)導(dǎo)致出乎意料的行為;如果改變的內(nèi)存單元屬于操作系統(tǒng),那么很可能會(huì)導(dǎo)致系統(tǒng)崩潰。編譯器可能會(huì)給出警 告消息,告知p未初始化,所以請(qǐng)留意收到的警告消息。

?

3.指針賦值

C語(yǔ)言允許使用賦值運(yùn)算符進(jìn)行指針的復(fù)制,前提是兩個(gè)指針具有相同的類型。假設(shè)i、j、 p和q聲明如下:

inti,j,*p,*q;?

語(yǔ)句?

p=&i;

是指針賦值的示例,把i的地址復(fù)制給p。下面是另一個(gè)指針賦值的示例:?

q=p;?

這條語(yǔ)句是把p的內(nèi)容(即i的地址)復(fù)制給q,效果是把q指向了p所指向的地方:

?

?

現(xiàn)在p和q都指向了i,所以可以用對(duì)*p或*q賦新值的方法來(lái)改變i:

*p=1;

?

*q=2;

?

?

任意數(shù)量的指針變量都可以指向同一個(gè)對(duì)象。注意不要把

q=p;

*q=*p;

搞混。第一條語(yǔ)句是指針賦值,而第二條語(yǔ)句不是。就如下面的例子顯示的:

p=&i;q=&j;i=1;

*q=*p;

賦值語(yǔ)句*q=*p;是把p指向的值(i的值)復(fù)制到q指向的對(duì)象(變量j)中。

?

推薦閱讀

《C語(yǔ)言程序設(shè)計(jì):現(xiàn)代方法(第2版?修訂版)》


本書特色

?近30年來(lái)珍寶級(jí)C語(yǔ)言入門經(jīng)典,累計(jì)印數(shù)10萬(wàn)+,豆瓣評(píng)分9.3分

?? 哈佛、麻省理工、斯坦福等諸多名校C語(yǔ)言教材?

?? 基于C1X標(biāo)準(zhǔn)全新升級(jí)

內(nèi)容簡(jiǎn)介:

時(shí)至今日,C語(yǔ)言仍然是計(jì)算機(jī)領(lǐng)域的通用語(yǔ)言之一,但今天的C語(yǔ)言已經(jīng)和最初的時(shí)候大不相同了。本書主要目的就是通過(guò)一種“現(xiàn)代方法”來(lái)介紹C語(yǔ)言,書中強(qiáng)調(diào)標(biāo)準(zhǔn)C,強(qiáng)調(diào)軟件工程,不再?gòu)?qiáng)調(diào)“手工優(yōu)化”。第2版修訂版中不僅有C99中的新特性,還與時(shí)俱進(jìn)地增加了C11和C18中的內(nèi)容。本書分為C語(yǔ)言的基礎(chǔ)特性、C語(yǔ)言的高級(jí)特性、C語(yǔ)言標(biāo)準(zhǔn)庫(kù)和參考資料4個(gè)部分。每章末尾的“問(wèn)與答”部分給出一系列與該章內(nèi)容相關(guān)的問(wèn)題及答案,此外還包含適量的習(xí)題。

***粉絲福利時(shí)間***

評(píng)論區(qū)留言,點(diǎn)贊數(shù)超過(guò)60即可

按照留言質(zhì)量選擇前六可獲得此書!!!

48個(gè)小時(shí)計(jì)!

注:若是在活動(dòng)截止日期后24小時(shí)內(nèi)無(wú)法取得用戶回復(fù)或聯(lián)系,將按照留言點(diǎn)贊排名順延

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的我想要一种语言,只需对它说我要干什么就行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。