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

【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?

這篇具有很好參考價(jià)值的文章主要介紹了【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?,《C語(yǔ)言初級(jí)篇》,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言,c++,指針,實(shí)用技巧

?? 鴿芷咕:個(gè)人主頁(yè)

??? 個(gè)人專欄:《快速入門(mén)C語(yǔ)言》《C語(yǔ)言初階篇》
??生活的理想,就是為了理想的生活!

?? 前言

?? ??hello! 各位寶子們大家好啊,前面給大大家介紹了指針的基礎(chǔ)知識(shí)。那么這一章就來(lái)給大家介紹下一部分內(nèi)容!
?? ??指針的運(yùn)算 以及 數(shù)組與指針的關(guān)系 也是我們?cè)谥羔樀膶W(xué)習(xí)過(guò)程中非常重要的!
?? ??本期文章收錄在《C語(yǔ)言初階篇》,大家有興趣可以看看吶!
???? 歡迎鐵汁們 ?? 點(diǎn)贊 ?? 收藏 ?留言 ??!

?? 注:前一章的指針講解是《指針的概念》

?? 指針運(yùn)算

?? 指針±整數(shù)

其實(shí)在上一章我們就見(jiàn)過(guò)指針加減整數(shù)了對(duì)于 type * p 的指針想要加 nn 是這樣計(jì)算的

  • n*sizeof(type)

?? 代碼演示:

#include <stdio.h>
int main()
{
	int arr[10] = { 0 };
	int* p = &arr[0];
	//不用下標(biāo)訪問(wèn)
	int sz = sizeof(arr) /sizeof(arr[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		*p = i;
		 p = p+1;
	}
	p = &arr[0];
	for (i = 0; i < sz; i++)
	{
		printf("%d\n",*(p+i));
	}
	return 0;
}

這里我們就使用指針加減整數(shù)的方式來(lái)進(jìn)行訪問(wèn)數(shù)組進(jìn)行賦值

  • 每次讓指針p 向前指4個(gè)字節(jié),然后進(jìn)行賦值!
  • 之后再把指針p 歸位到最開(kāi)始的指向位置進(jìn)行訪問(wèn)
    【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?,《C語(yǔ)言初級(jí)篇》,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言,c++,指針,實(shí)用技巧

前面的例子懂了我們?cè)賮?lái)看這個(gè)例子大家看看!
?? 代碼演示:

#define N_VALUES 5
float values[N_VALUES];
float *vp;
//指針+-整數(shù);指針的關(guān)系運(yùn)算
for (vp = &values[0]; vp < &values[N_VALUES];)
{
     *vp++ = 0;
}

這個(gè)例子其實(shí)和前面很像,數(shù)組中是從地址值向高地址使開(kāi)辟的一份連續(xù)的空間!這里我們把 數(shù)組的第一個(gè)地址賦給指針 p

  • 所以指針 p 肯定沒(méi)有 &values[5]的地址大!
  • p++ 每次向前指向下一個(gè)元素給每個(gè)元素賦值,直到把前五個(gè)都賦完!
    【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?,《C語(yǔ)言初級(jí)篇》,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言,c++,指針,實(shí)用技巧

?? 指針-指針

指針加減整數(shù)的例子我們了解完了,下面就來(lái)了解了解指針加減指針的應(yīng)用把!

  • 不知道大家了解個(gè)庫(kù)函數(shù)strlen 的實(shí)現(xiàn)嘛/
  • 今天就用指針-指針的方法實(shí)現(xiàn)一下!
    ?? 注:庫(kù)函數(shù)的模擬實(shí)現(xiàn)鏈接,大家感興趣可以看看呢!《strlen的三種實(shí)現(xiàn)方法》

?? 代碼演示:

#include <stdio.h>
int my_strlen(char* s)
{
    char* p = s;
    while (*p != '\0')
        p++;
    return p - s;
}

int main()
{
    char arr[] = "abcdef\0";
    int len = my_strlen(arr);
    printf("%d\n", len);
	return 0;
}

?? 誒這里就巧妙的應(yīng)用了指針里面存放的地址來(lái)進(jìn)行減法運(yùn)算,用差做取值。剛好能求字符的長(zhǎng)度的。

  • 因?yàn)橐粋€(gè)字符也就只能只能存放一個(gè)字節(jié)
  • 而每一個(gè)字節(jié)都有地址連續(xù)的空間地址就是遞增的!

?? 指針的關(guān)系運(yùn)算

指針減指針的運(yùn)算我們學(xué)了其實(shí)指針的運(yùn)算還有一條規(guī)定:
C語(yǔ)言標(biāo)準(zhǔn)規(guī)定:

  • 允許指向數(shù)組元素的指針與指向數(shù)組最后一個(gè)元素后面的那個(gè)內(nèi)存位置的指針比較,但是不允許與指向第一個(gè)元素之前的那個(gè)內(nèi)存位置的指針進(jìn)行比較。
  • 我們來(lái)看一下這段代碼:

?? 代碼演示:

for(vp = &values[5-1]; vp >= &values[0];vp--)
{
    *vp = 0;
}

這段代碼有什么問(wèn)題呢?其實(shí)這段代碼是倒著往回賦值的從數(shù)組 values[4],一直向后賦值但是

  • 當(dāng)最后一個(gè)元素 values[0] 賦完值的時(shí)候
  • 循環(huán)調(diào)整部分 vp-- 還會(huì)執(zhí)行一次導(dǎo)致 vp 成為野指針
  • 所以,當(dāng)我們?cè)诖蜗胗?vp 的是就需出現(xiàn)訪問(wèn)越界的問(wèn)題!
    【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?,《C語(yǔ)言初級(jí)篇》,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言,c++,指針,實(shí)用技巧

?? 代碼改進(jìn):

for(vp = &values[5-1]; vp > &values[0];)
{
    *--vp = 0;
}

這樣當(dāng)指針 vp 賦完值之后就不會(huì)再進(jìn)行減減的動(dòng)作了。因?yàn)楦揪瓦M(jìn)不來(lái)循環(huán)里面所以想前面的錯(cuò)誤我們就避免了。
?? 但是:這并不符合C語(yǔ)言的標(biāo)準(zhǔn),所以我們盡量不要這樣寫(xiě)以免有些編譯器跑不過(guò)去。

?? 指針和數(shù)組

?? 代碼演示:

#include <stdio.h>
int main()
{
 int arr[10] = {1,2,3,4,5,6,7,8,9,0};
    printf("%p\n", arr);
    printf("%p\n", &arr[0]);
    return 0;
}

?? 代碼結(jié)果:
【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?,《C語(yǔ)言初級(jí)篇》,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言,c++,指針,實(shí)用技巧

???? 誒這里就可以看到,其實(shí)數(shù)組名和數(shù)組第一個(gè)元素的地址是一樣,所以可見(jiàn)數(shù)組名和數(shù)組首元素的地址是一樣的。

  • 那么這樣寫(xiě)代碼是可行的:
int arr[10] = {1,2,3,4,5,6,7,8,9,0};
int *p = arr;//p存放的是數(shù)組首元素的地址
//等同于 *p= &arr[0];

?? 指針和數(shù)組變種推演

而指針是用來(lái)存放地址的,數(shù)組又是一塊連續(xù)的空間。所以我們可以拿指針變量來(lái)接收數(shù)組首元素的地址,用來(lái)遍歷數(shù)組!

  • 所以我們對(duì)指針解引用 和 數(shù)組下標(biāo)是相等的。
  • ??? arr[ i ] == *(p+i)
  • 而 ?? *(i+p) == arr[ i ]
  • 所以 ? *(i+p) == i[ arr ]
  • 而 :?p == arr == &arr[ 0 ]
  • 所以 ? *() 操作符 等同于 [ ]

?? 代碼演示:

#include <stdio.h>
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
    int* p = arr; //指針存放數(shù)組首元素的地址
    int sz = sizeof(arr) / sizeof(arr[0]);
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        arr[i] = i;
        printf("%d %d %d %d\n",arr[i],i[arr],*(p+i),p[i]);
    }
    return 0;
}

?? 代碼結(jié)果:
【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?,《C語(yǔ)言初級(jí)篇》,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言,c++,指針,實(shí)用技巧

  • 既然這倆個(gè)操作符是相等的那么又能推演出:
  • *(arr+i) == arr[ i ] == *(i+arr)
    ?? 注:這里就不給大家演示了,大家可以自己去試著練一下呢。

?? 指針和數(shù)組的關(guān)系

????前面我們看到了,數(shù)組和指針的應(yīng)用也給大家?guī)?lái)不一樣的數(shù)組寫(xiě)法是不是很有趣!那么他們究竟有什么關(guān)系?既然指針和數(shù)組使用使用起來(lái)一樣的效果那么我們可以把指針理解為數(shù)組嘛?

  • 其實(shí)我們可以這樣理解
  • 指針變量就是指針變量,不是數(shù)組。指針變量的大小是4/8個(gè)字節(jié),是用來(lái)專門(mén)存放地址的.
  • 數(shù)組就是數(shù)組,不是指針,數(shù)組是一塊連續(xù)的空間??梢源娣乓粋€(gè)或,多個(gè)類型相同的數(shù)據(jù)。

?? 那么他們的聯(lián)系是什么?

  • ?? 數(shù)組中,數(shù)組名其實(shí)是數(shù)組首元素的地址,數(shù)組名 == 地址 == 指針

  • ?? 當(dāng)我們知道數(shù)組首元素地址的時(shí)候,因?yàn)閿?shù)組又是連續(xù)存放的,所以通過(guò)指針就可以來(lái)遍歷訪問(wèn)我們的數(shù)組。

?? 二級(jí)指針

???? 指針變量也是變量,是變量就有地址,那指針變量的地址存放在哪里?答案是二級(jí)指針,存放指針變量的地址我們叫做二級(jí)指針!

?? 代碼演示:

#include <stdio.h>
int main()
{
	int a = 10;
	int* p = &a;//p是一級(jí)指針變量,指針變量也是變量,
	//變量是在內(nèi)存中開(kāi)辟空間的,是變量就有地址
	int** pp = &p;//pp就是二級(jí)指針變量,
	//二級(jí)指針變量就是用來(lái)存放一級(jí)指針變量的地址
    return 0;
}

?? 二級(jí)指針變量就是用來(lái)存放一級(jí)指針的地址,那么怎么來(lái)理解 int**

  • int** 第一個(gè) int* 說(shuō)明了 pp 是個(gè)指針變量
  • 而第二個(gè) * 則說(shuō)明了 pp 里面存放的是指針變量的地址
    【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?,《C語(yǔ)言初級(jí)篇》,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言,c++,指針,實(shí)用技巧

?? 二級(jí)指針的運(yùn)算

所以我們對(duì) pp 指針解引用一次是找到一級(jí)指針的內(nèi)容

  • 所以:*pp 等價(jià)于 p == &a

所以我們想用二級(jí)指針找到一級(jí)指針?biāo)赶虻膶?duì)象 a 就需要進(jìn)行倆次解引用

?? 代碼演示:

#include <stdio.h>
int main()
{
	int a = 10;
	int* p = &a;
	int** pp = &p;
	**pp = 100;
	printf("%d", a);
    return 0;
}

?? 代碼結(jié)果:

【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?,《C語(yǔ)言初級(jí)篇》,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言,c++,指針,實(shí)用技巧

??全篇總結(jié)

? 歸納:
好了以上就是關(guān)于指針的運(yùn)算 數(shù)組和指針的關(guān)系 以及 二級(jí)指針的概念我們就全講解完畢了!
??指針的運(yùn)算
??數(shù)組和指針的關(guān)系
??二級(jí)指針

?? 本章的內(nèi)容就是這么多啦!不知道大家了解了沒(méi)有呢?有不懂的可以私信評(píng)論嗷!
看到這里了還不給博主扣個(gè):
?? 點(diǎn)贊??收藏 ?? 關(guān)注!

?? ?? ?? ?? ???? ?? ?? ?? ?? ??
拜托拜托這個(gè)真的很重要!
你們的點(diǎn)贊就是博主更新最大的動(dòng)力!
有問(wèn)題可以評(píng)論或者私信呢秒回哦。
【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?,《C語(yǔ)言初級(jí)篇》,c語(yǔ)言,開(kāi)發(fā)語(yǔ)言,c++,指針,實(shí)用技巧文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-602312.html

到了這里,關(guān)于【C語(yǔ)言初階】指針的運(yùn)算or數(shù)組與指針的關(guān)系你了解嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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語(yǔ)言初階】初學(xué)必看,深入了解指針的概念!看完讓你不在害怕指針(圖文并茂)

    【C語(yǔ)言初階】初學(xué)必看,深入了解指針的概念!看完讓你不在害怕指針(圖文并茂)

    ?? 鴿芷咕 :個(gè)人主頁(yè) ??? 個(gè)人專欄 :《C語(yǔ)言初階篇》 《C語(yǔ)言進(jìn)階篇》 ??生活的理想,就是為了理想的生活! ?? ?? hello! 各位寶子們大家好啊,今天給大家?guī)?lái)的指針篇的初階,帶你先從底層一步步理解指針! ?? ?? 指針可以說(shuō)是C語(yǔ)言最重要的部分了!俗話說(shuō)

    2024年02月16日
    瀏覽(51)
  • 【C語(yǔ)言】指針的入門(mén)篇2,深入理解指針和數(shù)組的關(guān)系

    【C語(yǔ)言】指針的入門(mén)篇2,深入理解指針和數(shù)組的關(guān)系

    歡迎來(lái)CILMY23的博客喔,本期系列為【C語(yǔ)言】指針的入門(mén)篇2,深入理解指針和數(shù)組的關(guān)系,圖文講解指針和數(shù)組關(guān)系的知識(shí),帶大家理解指針和數(shù)組的關(guān)系,以及指針+數(shù)組的用法,感謝觀看,支持的可以給個(gè)贊哇。 前言 在上一篇博客中,我們了解了指針就是地址,并且把地

    2024年02月20日
    瀏覽(30)
  • C語(yǔ)言指針(適合C語(yǔ)言進(jìn)階者):一道題帶你深入理解數(shù)組與指針的關(guān)系

    ??個(gè)人主頁(yè):JAMES別扣了 ??在校大學(xué)生一枚。對(duì)IT有著極其濃厚的興趣 ?系列專欄目前為C語(yǔ)言初階、后續(xù)會(huì)更新c語(yǔ)言的學(xué)習(xí)方法以及c題目分享. ??希望我的文章對(duì)大家有著不一樣的幫助,歡迎大家關(guān)注我,我也會(huì)回關(guān),大家一起交流一起互動(dòng),感謝大家的多多支持哈! ??

    2024年04月16日
    瀏覽(19)
  • 前端學(xué)習(xí)C語(yǔ)言 - 初級(jí)指針

    本篇主要介紹: 指針和變量的關(guān)系 、指針類型、 指針的運(yùn)算符 、空指針和野指針、 指針和數(shù)組 、 指針和字符串 、const 和指針、以及 gdb 調(diào)試段錯(cuò)誤 。 指針是一種特殊的變量。存放地址的變量就是指針。 int num = 1; 會(huì)申請(qǐng)4個(gè)字節(jié)的內(nèi)存來(lái)存放數(shù)字1,每次訪問(wèn) num 就是訪問(wèn)

    2024年02月10日
    瀏覽(17)
  • C++ — 指針和數(shù)組的關(guān)系?

    C++ — 指針和數(shù)組的關(guān)系?

    在本文中,您將了解數(shù)組與指針之間的關(guān)系,并在程序中有效地使用它們。 指針是保存地址的變量。指針不僅可以存儲(chǔ)單個(gè)變量的地址,還可以存儲(chǔ)數(shù)組單元的地址。 看以下示例: ????????假設(shè)指針需要指向數(shù)組的第四個(gè)元素,即在上述情況下的第四個(gè)數(shù)組元素的保存地

    2024年02月07日
    瀏覽(16)
  • 【C語(yǔ)言初階(八)】初階指針詳解

    【C語(yǔ)言初階(八)】初階指針詳解

    ??博主CSDN主頁(yè):杭電碼農(nóng)-NEO?? ? ?專欄分類:C語(yǔ)言學(xué)習(xí)分享? ? ??代碼倉(cāng)庫(kù):NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)習(xí)更多C語(yǔ)言知識(shí) ? ???? 我們?cè)诮榻BC語(yǔ)言時(shí)已經(jīng)給大家介紹過(guò)指針的概念以及內(nèi)存地址的概念了,這里我們就不再重復(fù)說(shuō)明前面的內(nèi)容,對(duì)指針毫無(wú)了解的

    2024年02月09日
    瀏覽(27)
  • LeetCode 2401.最長(zhǎng)優(yōu)雅子數(shù)組 ----雙指針+位運(yùn)算

    LeetCode 2401.最長(zhǎng)優(yōu)雅子數(shù)組 ----雙指針+位運(yùn)算

    數(shù)據(jù)范圍1e5 考慮nlog 或者n的解法,考慮雙指針 因?yàn)檫@里要求的是一段連續(xù)的數(shù)組 想起我們的最長(zhǎng)不重復(fù)連續(xù)子序列 然后結(jié)合一下位運(yùn)算就好了 是一道雙指針不錯(cuò)的題目

    2024年02月06日
    瀏覽(23)
  • 【C語(yǔ)言】初階指針(指針及其類型以及野指針)

    【C語(yǔ)言】初階指針(指針及其類型以及野指針)

    簡(jiǎn)單不先于復(fù)雜,而是在復(fù)雜之后。 目錄 1. 指針是什么? 2. 指針和指針類型? 2.1? 指針+-整數(shù) 2.2 指針的解引用? 3. 野指針? 3.1 野指針成因? 3.2 如何規(guī)避野指針? 指針理解的兩個(gè)要點(diǎn): 1. 指針是內(nèi)存中最小單元的編號(hào),也就是地址。 2. 平時(shí)口語(yǔ)中說(shuō)的指針,通常指的是指

    2023年04月16日
    瀏覽(31)
  • C語(yǔ)言——指針詳解(初階)

    C語(yǔ)言——指針詳解(初階)

    在C語(yǔ)言學(xué)習(xí)過(guò)程中,指針?biāo)阋粋€(gè)難點(diǎn)。我總結(jié)所學(xué)的指針知識(shí),寫(xiě)一篇博客,希望大家對(duì)指針的知識(shí)理解的更通透。 每個(gè)內(nèi)存都有一個(gè)唯一的編號(hào),這個(gè)編號(hào)也被稱為地址,C語(yǔ)言創(chuàng)建變量。都要在內(nèi)存上開(kāi)辟空間。 編號(hào)= = 地址 = =指針 我們可以通過(guò)(取地址操作符)取出變

    2024年02月16日
    瀏覽(22)
  • 【C語(yǔ)言】指針初階

    【C語(yǔ)言】指針初階

    ?哈嘍,大家好,今天我們來(lái)學(xué)習(xí)C語(yǔ)言中的指針,今天主要學(xué)習(xí)初階指針,后期我們將繼續(xù)學(xué)習(xí)指針進(jìn)階。 目錄 1. 指針是什么 2. 指針和指針類型 2.1 指針+-整數(shù) 2.2 指針的解引用 3. 野指針 3.1 野指針成因 3.2 如何規(guī)避野指針 4. 指針運(yùn)算 4.1 指針+-整數(shù) 4.2 指針-指針 4.3 指針的關(guān)

    2024年02月09日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包