国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言 - 最簡單,最易懂的指針、引用講解

這篇具有很好參考價(jià)值的文章主要介紹了C語言 - 最簡單,最易懂的指針、引用講解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

C語言 - 最簡單,最易懂的指針、引用講解,# C/C++,c語言,開發(fā)語言

一、變量、地址、變量值

C語言 - 最簡單,最易懂的指針、引用講解,# C/C++,c語言,開發(fā)語言
C語言 - 最簡單,最易懂的指針、引用講解,# C/C++,c語言,開發(fā)語言

二、直接上代碼,一邊看上圖,一邊講解

#include <stdio.h>

struct Hello
{
    int a;
    int b;
};

int main()
{
    struct Hello h;
    h.a = 10;
    h.b = 20;

    struct Hello *hp;
    hp = &h;
    printf("1: h的地址是%d,hp地址是%d \n", &h, &hp);
    printf("2: h的地址是%p,hp地址是%p \n", h, hp);
    return 0;
}

輸出結(jié)果如下:

1: h的地址是6291096,hp地址是6290920
2: h的地址是000000140000000a,hp地址是00000000005ffe98

先看這一行

printf("1: h的地址是%d,hp地址是%d \n", &h, &hp);

都知道& 是取址符是吧,好,&h 是取h結(jié)構(gòu)體的地址,結(jié)果沒問題,參照上圖。
接著,&hp,hp是一個(gè)指針,指向了h所在的地址(hp = &h),注意:&hp是取hp變量的地址,而不是h的地址,所以打印出來的是 6290920。(printf %d是打印數(shù)字,這里輸出的是10進(jìn)制的結(jié)果)

再看第二行

printf("2: h的地址是%p,hp地址是%p \n", h, hp);

此處的 %p 是指打印指針變量的值,好,先看第二個(gè)參數(shù)hp,它本身是一個(gè)指針變量,值是 0x5ffe98,所以打印出的結(jié)果也是沒問題的。再看第一個(gè)h的打印結(jié)果,000000140000000a 這明顯是一個(gè)不太正常的結(jié)果。原因是,這里的用法有問題,h是一個(gè)結(jié)構(gòu)體,不是一個(gè)指針變量。但程序既然把h傳進(jìn)來了,就按照h存儲(chǔ)的值進(jìn)行打印,所以推斷出h處的變量值是 000000140000000a
C語言 - 最簡單,最易懂的指針、引用講解,# C/C++,c語言,開發(fā)語言
上面的虛線框內(nèi)的邏輯是錯(cuò)的,實(shí)際不存在的。通過這個(gè)圖能表達(dá)出上面的錯(cuò)誤寫法。

回顧一下:
printf 1 中的&h、 printf 2 中的 hp,它倆是一樣的作用,結(jié)果也是對(duì)的,就是h結(jié)構(gòu)體的地址,只不過一個(gè)10進(jìn)制、一個(gè)16進(jìn)制輸出。

printf 1 中的&hp
6290920 是 hp指針變量自己的地址
printf2 中的h
000000140000000a 一看這個(gè)值是不太正常,是因?yàn)楸旧硎莻€(gè)錯(cuò)誤用法,把h這個(gè)結(jié)構(gòu)體對(duì)象當(dāng)成指針傳入 printf 了。
C語言 - 最簡單,最易懂的指針、引用講解,# C/C++,c語言,開發(fā)語言

三、深入 &

所謂的取址運(yùn)算符,其實(shí)不準(zhǔn)確,會(huì)有誤導(dǎo)的成分在。
看代碼:

#include <stdio.h>

struct Hello
{
    int a;
    int b;
};

int main()
{
    struct Hello h;
    h.a = 10;
    h.b = 20;

    struct Hello harry[20];

    harry[0] = h;
    int address1 = &(harry[0]);
    printf("address1 is:%d", address1);

    return 0;
}

定義了一個(gè)Hello結(jié)構(gòu)體數(shù)組,我想取第一個(gè)元素所在的地址。以上代碼可以正常運(yùn)行,結(jié)果如下:

address1 is:6290928

但是,編譯器會(huì)在 &(harry[0]) 這里報(bào)出一個(gè)問題:

initialization of 'int' from 'struct Hello *' makes integer from pointer without a cast [-Wint-conversion]

就是說,類型不適配,為什么不適配呢?上面第一段代碼運(yùn)行時(shí),&打印出了一個(gè)10進(jìn)制的地址,這里用一個(gè)int 類型變量承接,沒問題啊。

莫非 & 的返回值類型不是 int ?
確實(shí):

在C語言中,&操作符用于獲取變量的內(nèi)存地址。它的返回值類型是 void*,即一個(gè)指向任何類型的指針。

具體來說,如果&操作符用于一個(gè)整數(shù)變量,它將返回一個(gè)指向該整數(shù)的指針。同樣地,如果它用于一個(gè)浮點(diǎn)數(shù)變量,它將返回一個(gè)指向該浮點(diǎn)數(shù)的指針。因此,&操作符的返回值類型取決于它所操作的變量類型。

需要注意的是,返回值類型為 void*,這意味著在使用返回的指針之前,通常需要將其轉(zhuǎn)換為正確的指針類型,以便正確地訪問和操作內(nèi)存地址。

正確的寫法,應(yīng)該是這樣:

struct Hello* ptr = &(harry[0]);
printf("Address of the 0 element is:%p", ptr);

使用一個(gè)指針 ptr 去承接 &的返回值,然后將指針的值打印出來,就是數(shù)組第一個(gè)元素的地址了。

就這么簡單??!
喜歡請(qǐng)關(guān)注、收藏、分享 ~(~ ̄▽ ̄)~

C語言 - 最簡單,最易懂的指針、引用講解,# C/C++,c語言,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-782745.html

到了這里,關(guān)于C語言 - 最簡單,最易懂的指針、引用講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語言指針操作(七)通過指針引用字符串

    C語言指針操作(七)通過指針引用字符串

    通過指針引用字符串詳解,以及字符指針變量和字符數(shù)組的比較、 在平常的案例中已大量地使用了字符串,如在 printf函數(shù)中輸出一個(gè)字符串。這些字符串都是以直接形式 (字面形式) 給出的,在一對(duì)雙引號(hào)中包含若干個(gè)合法的字符。在本節(jié)中將介紹使用字符串的更加靈活方便

    2024年02月03日
    瀏覽(23)
  • C 語言指針完全指南:創(chuàng)建、解除引用、指針與數(shù)組關(guān)系解析

    我們可以使用引用運(yùn)算符 獲取變量的內(nèi)存地址: 指針是一個(gè)將另一個(gè)變量的內(nèi)存地址作為其值的變量。 指針變量指向一個(gè)數(shù)據(jù)類型(如 int )的相同類型,并使用 * 運(yùn)算符創(chuàng)建。您正在使用的變量的地址被分配給指針: 示例解釋: 創(chuàng)建一個(gè)名為 ptr 的指針變量,指向一個(gè) i

    2024年02月03日
    瀏覽(18)
  • 8.3 【C語言】通過指針引用數(shù)組

    所謂數(shù)組元素的指針就是數(shù)組元素的地址。 可以用一個(gè)指針變量指向一個(gè)數(shù)組元素。例如: int a[10]={1,3,5,7,9,11,13,15,17,19}; int *p; p=a[0]; 引用數(shù)組元素可以用下標(biāo)法,也可以用指針法,即通過指向數(shù)組元素的指針找到所需的元素。 在指針已指向一個(gè)數(shù)組元素時(shí),可以對(duì)指針進(jìn)

    2024年02月12日
    瀏覽(22)
  • C++實(shí)現(xiàn)單鏈表【每一步詳細(xì)深入講解,代碼清晰、簡單、易懂】

    C++實(shí)現(xiàn)單鏈表【每一步詳細(xì)深入講解,代碼清晰、簡單、易懂】

    0、overview 鏈表元素由數(shù)據(jù)和指針構(gòu)成,因此鏈表的節(jié)點(diǎn)可以由一個(gè)包含這兩種元素的結(jié)構(gòu)體代表: 鏈表包含插入、刪除操作,而插入、刪除又必須先查找元素是否存在,因此查找方法也必不可少。 1、插入操作 例如:我們需要在偽頭節(jié)點(diǎn)(不包含數(shù)據(jù))和含有1的節(jié)點(diǎn)之間插

    2024年02月08日
    瀏覽(21)
  • 8.4 【C語言】通過指針引用字符串

    在C程序中,字符串是存放在字符數(shù)組中的。想引用一個(gè)字符串,可以用以下兩種方法。 (1)用字符數(shù)組存放一個(gè)字符串,可以通過數(shù)組名和下標(biāo)引用字符串中一個(gè)字符,也可以通過數(shù)組名和格式聲明“%s”輸出該字符串。 例:定義一個(gè)字符數(shù)組,在其中存放字符串“I love

    2024年02月11日
    瀏覽(29)
  • 【C語言】-- 一篇帶你了解指針,內(nèi)存,解引用

    【C語言】-- 一篇帶你了解指針,內(nèi)存,解引用

    目錄 1、什么是指針? 1.1 內(nèi)存 1.2 指針變量 二、指針和指針類型 1、指針類型 2、指針+整數(shù) 3、指針的解引用 三、野指針 1、野指針成因 (1) 指針未初始化 (2) 指針越界訪問 (3) 指針指向的空間釋放 2、如何規(guī)避野指針 四、指針運(yùn)算 1、指針-指針 ? ? ? ?本篇文章我們來了解C語

    2024年02月16日
    瀏覽(33)
  • 【C++初階】二、入門知識(shí)講解(引用、內(nèi)聯(lián)函數(shù)、auto關(guān)鍵字、基于范圍的for循環(huán)、指針空值nullptr)

    【C++初階】二、入門知識(shí)講解(引用、內(nèi)聯(lián)函數(shù)、auto關(guān)鍵字、基于范圍的for循環(huán)、指針空值nullptr)

    ========================================================================= 相關(guān)代碼gitee自取 : C語言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 【C++初階】一、入門知識(shí)講解 (C++、命名空間、C++輸入輸出、缺省參數(shù)、函數(shù)重載)-

    2024年02月04日
    瀏覽(97)
  • C語言:結(jié)構(gòu)體詳解(簡單易懂)

    C語言:結(jié)構(gòu)體詳解(簡單易懂)

    前言: 我們?cè)谇懊娴腃語言學(xué)習(xí)過程中,學(xué)習(xí)了各種數(shù)據(jù)類型,例如:整型數(shù)據(jù)類型、字符型數(shù)據(jù)類型,浮點(diǎn)型數(shù)據(jù)類型等,這些數(shù)據(jù)類型的設(shè)計(jì)都是為了對(duì)實(shí)際生活中的各種數(shù)據(jù)進(jìn)行在計(jì)算機(jī)上的儲(chǔ)存,但我們生活中還有一些數(shù)據(jù)無法使用以上單一的數(shù)據(jù)類型進(jìn)行描述,例

    2024年02月01日
    瀏覽(19)
  • C語言-指針講解(4)

    C語言-指針講解(4)

    在上一篇博客中: C語言-指針講解(3) 我們給大家介紹了指針進(jìn)階的用法 讓下面我們來回顧一下講了什么吧: 1.字符指針變量類型以及用法 2. 數(shù)組指針本質(zhì)上是一個(gè)指針,里面存放數(shù)組的地址。而指針數(shù)組本質(zhì)上是個(gè)數(shù)組,里面存放的是指針,指向的是整型數(shù)組。 以及數(shù)組指

    2024年02月04日
    瀏覽(22)
  • C語言-指針講解(3)

    C語言-指針講解(3)

    在上一篇博客中: C語言-指針講解(2) 我們更為深層地給大家介紹了指針的其他基礎(chǔ)用法 讓下面我們來回顧一下講了什么吧: 1.野指針指向的位置是不可知的。我們只有做到: 對(duì)指針初始化 小心數(shù)組越界 當(dāng)指針變量不再使用時(shí),應(yīng)及時(shí)置NULL,指針使用之前檢查有效性。 才

    2024年02月04日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包