中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
詳解C語言指針與常量的關(guān)系




常量指針概述

前面講過 const 前置作用于變量可創(chuàng)建符號(hào)常量

1const int test = 10.5;

也可以用 #define 宏指令實(shí)現(xiàn)。但 const 還可以創(chuàng)建數(shù)組常量、指針常量、指向常量的指針

1#define test 10.52const int test[2] = {1, 2};

在此后的代碼如果嘗試修改 test 數(shù)組常量,編譯將無法繼續(xù)。

1test[0] = 5;

指向常量的指針不能用于修改數(shù)值

比如:

1double test[5]{1.5, 2.5, 3.5, 4.5, 5.5};2const double *p = test;//聲明了個(gè)指向double的指針,指針指向 test 數(shù)值開始,這是允許賦值的

第二行代碼是 p 指向 const double 的指針,這樣就無法使用 p 來修改它所指向的值

1p = 10.5;//非法操作2p[2] = 10.5//非法操作

無論使用數(shù)組還是指針符號(hào)的方式來操作指針以求更變被指向的數(shù)據(jù)的值的方式都是不可取的。

但是如果這個(gè)指針附近有其他變量空間,可以通過這個(gè)常量指針指向其他地址。

1p++;//讓指針指向其他開辟的地址,這是允許的

此處輸出將是 2.5;

函數(shù)的常量指針參數(shù)

通常把指向常量的指針作為函數(shù)的形式參量,用于表明函數(shù)不會(huì)通過指針修改數(shù)據(jù),例如函數(shù) test()的原型聲明

1test(const double *p)

常量指針賦值的問題

關(guān)于指針賦值和 const 需要注意一些規(guī)則。比如,將常量或者非常量的數(shù)據(jù)地址賦予指針是合法的,你可以獲取或者指向它,但是不能它的修改數(shù)據(jù)。

1int test[2] = {0, 5};2const int p = test;//該常量指針指向了 test 數(shù)組首元素,是合法的。

p++;//此時(shí)輸出你會(huì)發(fā)現(xiàn)任然能夠正常編譯,但是仔細(xì)查看后,輸出的是數(shù)組的第二個(gè)元素(值 5),因?yàn)?p 先取出了 p 指針指向元素元素的值,然后將指針本身自增了 1 ,自增 1 移動(dòng)了一個(gè)數(shù)據(jù)單位,指針指向了現(xiàn)在這個(gè)元素的下一個(gè)元素(如果存在的話就會(huì)輸出正常值,不存在,這將是一個(gè)垃圾值),所以指針并沒有改變指向元素的數(shù)據(jù),依然是常量指針狀態(tài)。

(p)++;//此時(shí)你更改了數(shù)據(jù),你先取出指針 p 指向的值,再把這個(gè)值加上了 1(而不是一個(gè)數(shù)據(jù)單位),但是這編譯將不會(huì)通過,因?yàn)槭遣缓戏ǖ?,你使用的是常量指針指向這個(gè)值。

一句話總結(jié),常量指針,允許被賦值,但是不能更改數(shù)據(jù)!

常量數(shù)據(jù)賦值給普通指針的問題

然而常量指針可以指向常量或者非常量數(shù)據(jù),只是不能修改。但是常量的數(shù)據(jù)是不能被指針?biāo)赶虻?,比如下面這個(gè)例子

1const int test = 5; //test 是 int 類型的常量數(shù)據(jù)2int p = test;//這是不被允許的,不能把普通指針不能指向常量數(shù)據(jù),否則你就能修改常量的數(shù)據(jù)了,這樣就喪失了常量存在的意義。3const int p = test;//但是如果你這樣,用一個(gè)常量指針,指向一個(gè)常量的數(shù)據(jù),是可行的。

常量和函數(shù)參量搭配使用

在函數(shù)參數(shù)定義(聲明)中,使用 const 可以保護(hù)數(shù)據(jù),防止數(shù)據(jù)被修改。并且可以讓你使用其他函數(shù)中聲明為 const 的數(shù)據(jù)(如果不在函數(shù)中使用 const 來修飾的指針(即普通指針),那么普通指針是無法指向常量數(shù)據(jù)的(出錯(cuò)),只有常量指針才能指向常量或非常量數(shù)據(jù)),但是你要不打算用指針來作為形參,而是用普通變量或者常量類型來接收數(shù)據(jù),也是可行的。

指針常量

注意,這是指針常量,而不是上面說的常量指針,這是兩個(gè)內(nèi)容,這可能有點(diǎn)繞口,但是先看下面這個(gè)例子。

之前我們用 const 來修飾一個(gè)指針整體,而不是指針本身,我們可以任意的再把指針指向其他的地址,可以對(duì)這個(gè)指針進(jìn)行增量減量數(shù)據(jù)單位以指向下一個(gè)元素地址,,可改地址只是不能修改其指向元素的數(shù)據(jù),所以這是一個(gè)常量指針。

從中文語義分析來說,常量是形容詞,指針是名詞,以指針為中心的一個(gè)偏正結(jié)構(gòu)短語(偏和正,主次關(guān)系)。這樣看,常量指針本質(zhì)是指針,常量修飾它,表示這個(gè)指針乃是一個(gè)指向常量的指針(變量),指針指向的對(duì)象是常量,那么這個(gè)對(duì)象不能被更改。( 此處內(nèi)容自網(wǎng)絡(luò))常量指針,是常量作為主語,指針修飾常量。所以常量指針,指針本身不是常量。而指針常量,指針為主語,是常量修飾指針,所以指針常量,指針本身是常量。 有點(diǎn)拗口,多讀幾遍!

指針常量是什么

用關(guān)鍵字 const 修飾本體為指針本身時(shí),我們能保護(hù)指針指向的元素地址不被更改,而內(nèi)容可被更改。這正好這和常量指針恰恰相反,剛好也說明了常量的對(duì)象不一樣。這兩個(gè)之間的區(qū)別就在于 const 的位置,比如下面這個(gè)例子。

1int test[2] = {0, 5};2const int p = test;//常量指針 能夠改變地址,但無法改變數(shù)據(jù)3int const p = test;//常量指針 這兩個(gè)常量指針的 const 均放置于指針的外面,而不是內(nèi)部4int * const p = test;//指針常量 仍然可以修改被指向的變量的值,但是無法改變地址,只能是最初賦給指針的地址。

常量指針的多種寫法

注意:以上可見,常量指針有兩種寫法,分別是 const 前置到類型聲明,另一個(gè)是 const 放置在類型聲明后,但未進(jìn)入指針聲明。本來以為這兩個(gè)寫法是存在歧義,有優(yōu)先級(jí)差異。但是經(jīng)過實(shí)際編譯器優(yōu)化后,轉(zhuǎn)為匯編分析比對(duì)。在優(yōu)化后,或者編譯后,兩個(gè)語句為等同語句,并無差異,均為聲明指針常量。

如圖:

既不可改變地址也不可改變數(shù)據(jù)的指針

有的情況下要保證數(shù)據(jù)不可變動(dòng),這包括了指針指向地址和指向地址的內(nèi)容都不可更改。那么我們只需要結(jié)合常量指針和指針常量即可。

用兩個(gè) const 來構(gòu)造聲明指針,這個(gè)指針既不可以更改所指向的地址,也不可以更改被指向地址所存儲(chǔ)的數(shù)據(jù)。確保了數(shù)據(jù)的安全。比如:

1int test[2] = {0, 5};2int const * const p = test;3cosnt int * const p = test;

最后的安利

異步社區(qū)是一個(gè)有氛圍并且資源豐富的IT專業(yè)圖書社區(qū),在這里可以讀到最新、最熱的IT類圖書!我想要社區(qū)的《操作系統(tǒng)真象還原》

1int test[2] = {0, 5};2int const * const p = test;3cosnt int * const p = test;

最后的安利

異步社區(qū)是一個(gè)有氛圍并且資源豐富的IT專業(yè)圖書社區(qū),在這里可以讀到最新、最熱的IT類圖書!我想要社區(qū)的《操作系統(tǒng)真象還原》


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++指針
值得收藏的 C語言 指針講解文章
「博文連載」C 中的“指針”
常量指針和指針常量的區(qū)別詳解
指針作為參數(shù)傳遞
const放在函數(shù)前后的區(qū)別
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服