關於c語言的傳參問題個人見解

2021-08-02 06:31:12 字數 1317 閱讀 3098

第一次寫部落格 哈哈,興奮。

今天突然發現虛擬機器中突然發現乙個小的測試例子 ,自己都不記得了,仔細研究了一下我發現我居然是做錯了,好吧 c語言還是不紮實,不過關,雖然工作了一年了,唉;

這是乙個關於函式傳參並且考察指標操作的例子,直接上例子;

#include

#define ulong unsigned long 

#define static static

#define void void

#define in

static ulong g_auldata[3] = ;

void funcb(in ulong *pulb)

void funca(in ulong **ppula)

int main(int argc, const char *argv)

在函式funca中和函式funcb中,關於指標的每乙個操作的我還是可以理解的,main函式中,給funca傳遞的引數相當於&(陣列名),也就是乙個二級指標,再funca中的也是幾個指標的基本操作:

**ppula+=1 是把陣列中第乙個元素100+1變成101。

*ppula+=1 是把*ppula這個指標指向200,指標+1,指向陣列的下乙個元素;

**ppula+1 是把陣列中的第二個元素200+1變成201;

funcb(*ppula)中把*ppula引數傳給了函式funcb,其實*ppula現在指向的是陣列的第二個元素201,因為funca第三個操作已經把陣列第二個元素200改變為了201;

在函式b中的一些操作更加簡單

*pulb += 1;把陣列中第2個元素201+1變成202;

pulb += 1;指標指向陣列第三個元素300;

*pulb += 1;陣列第三個元素300+變成301;

到現在你們猜main函式中printf("%lu\r\n", *puldata);這個語句會列印什麼,如果你猜301,不好意思 ,你錯了,如果你答202,那恭喜你,你答對了。

這裡為什麼是202 呢,其實在我們呼叫funcb的時候,傳進去的*ppula這個引數,作用域是在funca中的,*ppula所指向的內容是可以改變的,比如*pulb+=1,可以改變陣列中201的值。但是如果對這個引數*ppula本身進行操作導致引數*ppula發生改變的時候,比如pulb+=1,指向陣列中元素300;在函式funcb其實pulb確實指向了300,但是對funca中傳的*ppula的值沒有影響,在函式funca中*ppula依舊指向陣列第二個元素201.如果您還不明白您可以去別的地方好好了解一下函式的形參這個概念,個人能力所限,不能再更加詳細的說明這個問題了 ,對不起大家。

例子是個好例子,講解的水平太菜了,各位多包涵;

關於ROS的個人見解

ros只是乙個程式開發框架而已,它主要有以下東西組成 1 ros執行環境,主要負責全域性資訊 訊息傳遞 名稱管理。2 ros專用函式庫,主要是規定ros各種規則 通訊 管理全域性資訊。3 各種能重複利用的package 4 一些方便開發的工具 ros本身執行在linux中 用ros開發框架,開發出來...

關於CAP的個人見解

在集群環境下,保證各個節點的資料在任一時刻訪問都是一致的 在集群環境下,保證任一時刻都能保證服務可用 在集群環境下,當部分服務不可用時,整體服務對外依舊可用,但分割槽容錯性理論來講不能達到100 的可能,因為既然是分布式,就會存在諸如網線之類的各種通訊故障問題,嚴格來講,只能說達到99.9999 網...

文字相似性問題個人見解

jaccard 這時,就涉及到,相似的閾值,以及重複的閾值了,就是min threshold與max threshold了,當jaccard min threshold時,表示文章a b相似,而jaccard max threshold時,則表示a b過於相似,可認為文章重複,具體引數可根據資料集的...