你真的了解指標了嗎?來道指標4級題目

2021-09-28 14:54:04 字數 2486 閱讀 7513

還在被c/c++指標折騰到抓狂嗎?

很正常,我也是。

int num=1;

int* pnum=#

僅知道pnum型別是整型指標,以及怎樣獲取乙個變數的指標的你,還是個指標小白,連指標的門檻大概都還沒有邁進,前行的路上等待你的可還有指標2級,指標4級,指標6級,專業指標8級……

深知指標疼痛的博主,還在艱辛地奮鬥在指標從入門到放棄的路上呢

嗯,程式中的天使和魔鬼,說的大概就是指標了。

來道指標4級題目看看:

想想下面的程式會怎樣

#include "pch.h"

#include

int addarr(const int* p1, int num)

delete p1;

return thesum;

}int main()

;std::cout << "arr:" << arr << std::endl;

int sumofarr = 0;

sumofarr = addarr(arr, 3);

std::cout << "sumofarr:" << sumofarr << std::endl;

}事實上,這裡面有一些不正確,無法編譯的地方,見下面詳細解釋

#include "pch.h"

#include

int addarr(const int* p1, int num)//p1是指向常量整數的指標(指標的指向可以更改,但是所指向的位址中儲存的值不可以更改》_<)

delete p1;

return thesum;

}int main()

;std::cout << "arr:" << arr << std::endl;

int sumofarr = 0;

sumofarr = addarr(arr, 3);

std::cout << "sumofarr:" << sumofarr << std::endl;

}明白了嗎?你真的明白了嗎?還不明白?明白了?真的明白了?你以為你真的明白了?

再看一遍題目,想想它會怎麼樣:

#include "pch.h"

#include

int addarr(int* const p1, int num)

delete p1;

return thesum;

}int main()

;std::cout << "arr:" << arr << std::endl;

int sumofarr = 0;

sumofarr = addarr(arr, 3);

std::cout << "sumofarr:" << sumofarr << std::endl;

}怎麼樣,茫然了點沒有,懵逼了點沒有?

來看看具體的解釋

#include "pch.h"

#include

int addarr(int* const p1, int num)//p1是指向整數的常量指標(指標的指向不可以更改,但是所指向的位址中儲存的值可以更改》_<)

//覺得上面的注釋似曾相識是否?仔細一看,那是不一樣的

//delete p1;

return thesum;

}int main()

;std::cout << "arr:" << arr << std::endl; //小小的問題,arr的輸出和p1的輸出一樣嗎?

int sumofarr = 0;

sumofarr = addarr(arr, 3);

std::cout << "sumofarr:" << sumofarr << std::endl;

}arr的輸出和p1的輸出一樣嗎?

當然一樣了!函式addarr呼叫時,實參arr複製傳遞給了p1,arr和p1的值能不一樣麼?

怎麼樣,現在清醒了點沒有?

清醒了吧,那再來懵逼點:

指標與常量的關係分三類,

(1)指向常量物件的指標

(2)指向某個物件的常量指標

(3)指向常量物件的常量指標

第一種情況下,不能修改被指向的物件,但可以使指標指向其他的物件;

int value=5;

const int* pvalue=&value;

*pvalue=6;//編譯不通過

pvalue=nullptr;//可以

第二種情況下,不能修改指標中儲存的位址,但可以修改指標指向的物件

int value=5;

int* const pvalue=&value;

*pvalue=6;//可以

pvalue=nullptr;//編譯不通過

第三種情況下,指標和被指向的物件都定義成常量,因此都不能修改

int value=5;

int* const pvalue=&value;

*pvalue=6;//編譯不通過

pvalue=nullptr;//編譯不通過

哈哈哈哈哈哈……cnm…… mnp結束!

Vue router你真的了解了嗎

6.1 如何實現改變url的情況下頁面不進行重新整理location.hash 設定乙個值 history.pushstate 6.2 建立路由 掌握基本的結構 在使用腳手架建立的時候使用路由,能夠在src下建立乙個route檔案,裡面的index.js來配置路由資訊,並且在main.js裡面進行匯...

你真的了解Ioc與AOP嗎?(4)

本部分示例 請參考 src step4 目錄 如果使用remoting技術對hellogenerator進行改造,使其具有分布式遠端訪問能力,那麼在不使用ioc技術的情況下,我們將會作出如下調整 如果要讓某個物件具有分布式的功能,必須使其繼承自marshalbyrefobject,這樣才可以具有遠端...

你真的了解Ioc與AOP嗎?(4)

你真的了解ioc與aop嗎?1 你真的了解ioc與aop嗎?2 你真的了解ioc與aop嗎?3 你真的了解ioc與aop嗎?4 你真的了解ioc與aop嗎?5 本部分示例 請參考 src step4 目錄 如果使用remoting技術對hellogenerator進行改造,使其具有分布式遠端訪問能力...