日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言指針運(yùn)算符詳解

嵌入式愛好者之家 ? 來源:嵌入式愛好者之家 ? 2024-10-30 11:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

C語言中,當(dāng)你有一個(gè)指向數(shù)組中某個(gè)元素的指針時(shí),你可以對(duì)該指針執(zhí)行某些算術(shù)運(yùn)算,例如加法或減法。這些運(yùn)算可以用來遍歷數(shù)組中的元素,如ptr[i]等價(jià)于*(ptr + i)。然而,如果你的操作使得指針指向了數(shù)組以外的位置(除了數(shù)組結(jié)束位置之后的一個(gè)位置之外),那么這個(gè)指針的行為就是未定義的。

例如:

如果ptr指向數(shù)組的第一個(gè)元素,那么ptr + 1將指向第二個(gè)元素。

如果ptr指向數(shù)組的最后一個(gè)元素,那么ptr + 1將指向數(shù)組結(jié)束之后的一個(gè)虛構(gòu)位置,這是允許的,但是試圖訪問該位置(如*(ptr + 1))將導(dǎo)致未定義行為。

如果ptr指向數(shù)組的最后一個(gè)元素,那么ptr + 2指向的位置超出了數(shù)組的范圍,這將導(dǎo)致未定義行為。

未定義行為意味著編譯器可以做出任何事情,包括但不限于程序崩潰、數(shù)據(jù)損壞或其他不可預(yù)測的結(jié)果。因此,在編寫涉及指針操作的代碼時(shí),確保指針始終在安全范圍內(nèi)是非常重要的。在實(shí)際編程中,常常會(huì)用到邊界檢查來防止這類問題的發(fā)生。

詳述

創(chuàng)建一個(gè)指向數(shù)組末尾之后的指針在標(biāo)準(zhǔn)中是有明確定義的,并且本規(guī)則允許這種操作。但是,引用通過這種方式創(chuàng)建的指針會(huì)導(dǎo)致未定義的行為,并且此規(guī)則禁止這樣做。

本規(guī)則適用于所有形式的數(shù)組索引

整數(shù)表達(dá)式 + 整數(shù)表達(dá)式

指針表達(dá)式 + 整數(shù)表達(dá)式

指針表達(dá)式 += 整數(shù)表達(dá)式

指針表達(dá)式 -= 整數(shù)表達(dá)式

++ 指針表達(dá)式

-- 指針表達(dá)式

指針表達(dá)式++

指針表達(dá)式--

整數(shù)表達(dá)式 [指針表達(dá)式]

指針表達(dá)式 [整數(shù)表達(dá)式]

注意:對(duì)于指針?biāo)阈g(shù)的目的,標(biāo)準(zhǔn)將不是數(shù)組成員的對(duì)象視為具有單個(gè)元素的數(shù)組。

理由

雖然一些編譯器可以在編譯時(shí)確定數(shù)組邊界是否超出,但在運(yùn)行時(shí)通常不會(huì)對(duì)無效數(shù)組下標(biāo)進(jìn)行檢查。使用無效數(shù)組下標(biāo)可能導(dǎo)致程序出現(xiàn)錯(cuò)誤行為。

由于它們不容易通過靜態(tài)分析或手動(dòng)審查來檢查,因此運(yùn)行時(shí)推導(dǎo)出的數(shù)組下標(biāo)值最令人擔(dān)憂。如果可能的話,應(yīng)該提供代碼以檢查此類下標(biāo)值的有效性,并根據(jù)需要采取適當(dāng)?shù)男袆?dòng)。

如果從上述表達(dá)式之一獲得的結(jié)果不是一個(gè)指向由指針表達(dá)式所指向的數(shù)組元素或一個(gè)超過該數(shù)組末尾的一個(gè)元素的指針,則其行為是未定義的。有關(guān)更多信息,請參閱C90第6.3.6節(jié)、C99第6.5.6節(jié)。

多維數(shù)組是“數(shù)組的數(shù)組”。本規(guī)則不允許導(dǎo)致指針指向不同子數(shù)組的指針?biāo)阈g(shù)。不應(yīng)使用數(shù)組下標(biāo)跨越“內(nèi)部”邊界的數(shù)組下標(biāo),因?yàn)檫@樣的行為是未定義的。

示例

使用+運(yùn)算符也會(huì)違反規(guī)則18.4。

int32_t f1( int32_t * const a1, int32_t a2[10][1]) 
{
  /* Compliant/non-Compliant depending on the value of a1 */
  int32_t *p = &a1[3];     
return*(a2+9);/*Compliant*/
}


void f2(void)
{
    int32_t data = 0;
    int32_t b = 0;
    int32_t c[10] = {0};
    // 5-element array of 2-element arrays of int32_t
    int32_t d[5][2] = {0}; 
 
    int32_t *p1 = &c[0];    //Compliant
    int32_t *p2 = &c[10];   // Compliant - points to one beyond
    int32_t *p3 = &c[11];   // Non - compliant - undefined, points to two beyond
    
    data = *p2;




    data = f1(&b, c);
    data = f1(c, c);
    
    p1++;         /*Compliant*/
    c[-1] = 0;    /*Non-Compliant - undefined, array bounds exceeded*/
    data = c[10];    /*Non-Compliant - undefined,dereference of address one beyond*/
   
    d[3][1] = 0;         /*Compliant*/
    data = *(*(d + 3) + 1);      /*Compliant*/
    data = d[2][3];      /*Non-compliant - undefined, internal boundary exeeded*/
    
    p1 = d[1];
    data = p1[1];
}


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7646

    瀏覽量

    146202
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    484

    瀏覽量

    71973
  • 運(yùn)算符
    +關(guān)注

    關(guān)注

    0

    文章

    173

    瀏覽量

    12174

原文標(biāo)題:Rule18.1 指針運(yùn)算符的結(jié)果應(yīng)指向與該指針運(yùn)算符相同的數(shù)組元素,否則其行為是未定義的

文章出處:【微信號(hào):嵌入式愛好者之家,微信公眾號(hào):嵌入式愛好者之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語言基礎(chǔ)知識(shí)(4)--運(yùn)算符

    C語言中,運(yùn)算符包括有算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和位
    的頭像 發(fā)表于 06-15 09:38 ?6324次閱讀

    C語言中賦值運(yùn)算符詳解

    C語言中,賦值運(yùn)算符用于將一個(gè)值賦給變量。
    發(fā)表于 08-18 16:38 ?3007次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中賦值<b class='flag-5'>運(yùn)算符</b><b class='flag-5'>詳解</b>

    C語言運(yùn)算符的使用方法

    詳細(xì)介紹了C語言表達(dá)式、算術(shù)運(yùn)算符、賦值運(yùn)算符、關(guān)系運(yùn)算符、條件結(jié)構(gòu)、邏輯運(yùn)算符、位
    發(fā)表于 11-02 11:30 ?3430次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>運(yùn)算符</b>的使用方法

    【跟我學(xué)單片機(jī)C語言詳解運(yùn)算符和表達(dá)式的位運(yùn)算符

    【跟我學(xué)單片機(jī)C語言詳解運(yùn)算符和表達(dá)式的位運(yùn)算符學(xué)過匯編的朋友都知道匯編對(duì)位的處理能力是很強(qiáng)的,但是單片機(jī)C
    發(fā)表于 12-07 13:51

    C語言運(yùn)算符優(yōu)先級(jí)(超詳細(xì))

    C語言運(yùn)算符優(yōu)先級(jí)(超詳細(xì)) 當(dāng)想找哪個(gè)運(yùn)算符優(yōu)先級(jí)高時(shí),很多時(shí)候總是想找的就沒有,真讓人氣憤!現(xiàn)在,終于有個(gè)我個(gè)人覺得非常全的,分享給大家,歡迎拍磚!
    發(fā)表于 04-27 16:47

    C語言程序設(shè)計(jì)--運(yùn)算符與表達(dá)式

    c語言對(duì)數(shù)據(jù)有很強(qiáng)的表達(dá)能力,具有十分豐富的運(yùn)算符,利用這些運(yùn)算符可以組成各種表達(dá)式及語句。運(yùn)算符就是完成某種特定
    發(fā)表于 07-14 21:30 ?46次下載

    C語言入門教程-運(yùn)算符優(yōu)先級(jí)

    運(yùn)算符優(yōu)先級(jí)C語言有豐富的運(yùn)算符。如果不清楚這些運(yùn)算符的優(yōu)先級(jí),則在同時(shí)使用多個(gè)運(yùn)算符時(shí)就容易產(chǎn)
    發(fā)表于 07-29 14:21 ?1647次閱讀

    單片機(jī)C語言教程-運(yùn)算符和表達(dá)式

    單片機(jī)C語言教程-運(yùn)算符和表達(dá)式   單片機(jī)C語言教程-運(yùn)算符和表達(dá)式  
    發(fā)表于 03-27 17:13 ?2494次閱讀

    C語言運(yùn)算符的使用

    C語言運(yùn)算符的使用,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 08-23 17:56 ?0次下載

    C運(yùn)算符的優(yōu)先級(jí)和結(jié)合性詳細(xì)解決

    運(yùn)算符是一種告訴編譯器執(zhí)行特定的數(shù)學(xué)或邏輯操作的符號(hào)。 C語言內(nèi)置了豐富的運(yùn)算符,大體可分為10類:算術(shù)運(yùn)算符、關(guān)系
    的頭像 發(fā)表于 02-22 17:27 ?4123次閱讀

    C語言總結(jié)_語句、運(yùn)算符

    當(dāng)前文章復(fù)盤C語言的: 位運(yùn)算運(yùn)算符、基本運(yùn)算符、數(shù)據(jù)類型、變量、for語句、while語句、goto語句、switch語句、
    的頭像 發(fā)表于 08-14 09:39 ?2043次閱讀

    c語言運(yùn)算符及例題

    C語言中邏輯運(yùn)算符包含邏輯與&&、邏輯或||、邏輯非!三種。其中邏輯與&&是雙目運(yùn)算符,即需要運(yùn)算符兩邊都要有表達(dá)式,且兩邊表達(dá)式都為真,此
    發(fā)表于 02-16 16:14 ?0次下載

    C語言運(yùn)算符

    C語言中,我們常常會(huì)用到表達(dá)式,在使用表達(dá)式的過程中便會(huì)使用到運(yùn)算符。C語言中,不同的運(yùn)算符
    的頭像 發(fā)表于 02-21 15:12 ?2428次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>運(yùn)算符</b>

    C語言中什么是關(guān)系運(yùn)算符

    C語言中,比較稱為關(guān)系運(yùn)算符,所謂關(guān)系運(yùn)算就是比較運(yùn)算,將兩個(gè)數(shù)值進(jìn)行比較,判斷其比較的結(jié)果
    的頭像 發(fā)表于 03-09 10:47 ?3493次閱讀

    c語言從右到左的運(yùn)算符有哪些

    以下是一些主要的從右到左運(yùn)算C語言運(yùn)算符: 函數(shù)調(diào)用運(yùn)算符 ( () ):當(dāng)您調(diào)用一個(gè)函數(shù)時(shí),參數(shù)列表是從右到左進(jìn)行求值的。 后置遞增
    的頭像 發(fā)表于 08-20 11:39 ?2744次閱讀
    邵阳市| 德江县| 丰顺县| 株洲县| 伊吾县| 永平县| 威远县| 衡水市| 昔阳县| 静安区| 泗洪县| 山阳县| 新化县| 金山区| 洛南县| 德州市| 翼城县| 许昌县| 互助| 玉田县| 辽阳县| 扎鲁特旗| 太康县| 垫江县| 常州市| 昌邑市| 开鲁县| 繁昌县| 淮北市| 威远县| 库车县| 搜索| 依安县| 讷河市| 奉新县| 融水| 仪陇县| 稷山县| 宝鸡市| 岢岚县| 朝阳县|