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

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

C語言函數(shù)不改變形參內(nèi)容的說明

聚豐開發(fā) ? 2018-10-29 11:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

注:本文是作者以前發(fā)表在其個人博客,現(xiàn)在發(fā)布到“聚豐開發(fā)”專欄


這也是面試時常碰到的題,通常是把一個指針作為函數(shù)的輸入?yún)?shù),在函數(shù)內(nèi)部會改變輸入?yún)?shù)對應的指針,問面試者在函數(shù)調(diào)用過程中指針的具體內(nèi)容。


這里我也設計一個這樣的函數(shù),功能是對輸入?yún)?shù)指定的地址連續(xù)寫入指定個數(shù)的指定內(nèi)容。問在位置(1)(2)(3)指針p的值,在位置(4)(5)指針 buf的值。



答案是:


位置(1)指針p還沒賦值為空指針0
位置(2)(3)指針p的值均為&data_buf[0]
位置(4)針buf值為&data_buf[0]
位置(5)指針buf值為&data_buf[100]

void fill_buffer(unsigned char* buf,unsigned char data,unsigned char size)
{ //位置(4)
unsigned char i;
for(i=0;i {
*buf=data;
buf++;
}
}//位置(5)

void main(void)
{
unsigned char data_buf[256];
unsigned char *p;
p=(char*)data_buf; //位置(1)
fill_buffer(p,0,100); //位置(2)
while(1); //位置(3)
}


可能有的人會疑惑,明明指針p作為函數(shù)的參數(shù),在函數(shù)中有進行遞增操作,為什么函數(shù)返回后在位置三還是保持內(nèi)容為&data_buf[0]不變?


有這種想法的人理解的邏輯流程如下,看上去也好像有道理。


void main(void)
{
unsigned char data_buf[256];
unsigned char *p;
p=(char*)data_buf;
fill_buffer(p,0,100); p在這里是輸入?yún)?shù)
//unsigned char i;
//for(i=0;i //{
// *p=data;
// p++; 執(zhí)行到這里不就是改變了p嗎?
//}
while(1); 函數(shù)返回p應該也改變了
}


這種理解自然不對,對于函數(shù)的參數(shù),不能簡單的在函數(shù)中進行替代理解,以這里的fill_buffer(p,0,100)為例子,函數(shù)中并不會對p進行任何處理,而是先將p的值用一個臨時變量保存起來(也可以為寄存器),在函數(shù)中使用的是這個臨時變量。


如果用匯編來表示 fill_buffer(p,0,100)的調(diào)用過程,參考流程如下:


;lda x 為把x裝到A中
;sta x 為把A的內(nèi)容存到裝x中
;得到第一個參數(shù)
lda p
sta buf_para
;得到第二個參數(shù)
lda #0
sta data_para
;得到第三個參數(shù)
lda #100
sta size_para
;跳轉(zhuǎn)到具體函數(shù)代碼位置
jsr fill_buffer



從這個流程可以看出指針p實際上沒有被改寫,雖然p所指的位置會被函數(shù)寫入指定的內(nèi)容,函數(shù)只是從p得到一個起始地址,在函數(shù)內(nèi)部是通過另外一個指針來改寫這個地址開始位置的內(nèi)容,在調(diào)試中觀察到的寫指針是另外那個指針,并不是p。這也是C函數(shù)指針可以做輸入輸出參數(shù),而變量只能做輸入?yún)?shù)的原因。


如func(char *p,char data),函數(shù)可以讀p所指的地址內(nèi)容,也可以向p所指的地址寫入指定內(nèi)容,但data只能供函數(shù)使用,不能將函數(shù)中的值反存到data中。


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

    關注

    6

    文章

    90

    瀏覽量

    22065
  • 面試題
    +關注

    關注

    1

    文章

    12

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    工作流大模型節(jié)點說明

    大模型節(jié)點是平臺提供的基礎節(jié)點之一,開發(fā)者可以在該節(jié)點使用大語言模型處理任務。 節(jié)點說明 大模型節(jié)點可以調(diào)用大型語言模型,根據(jù)輸入?yún)?shù)和提示詞生成內(nèi)容,通常用于執(zhí)行文本生成任務,例如文
    發(fā)表于 03-19 14:56

    C語言主要特點

    指針類型數(shù)據(jù),使用十分靈活和多樣化,能用來實現(xiàn)各種復雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹、棧等)的運算。 4.具有結(jié)構(gòu)化的控制語句。用函數(shù)作為程序的模塊單位,便于實現(xiàn)程序的模塊化。C語言是完全模塊化和結(jié)構(gòu)化的
    發(fā)表于 01-05 07:41

    C語言嵌入式系統(tǒng)編程注意事項-內(nèi)存操作

    C語言嵌入式系統(tǒng)編程注意事項之內(nèi)存操作 在嵌入式系統(tǒng)的編程中,常常要求在特定的內(nèi)存單元讀寫內(nèi)容,匯編有對應的MOV指令,而除C/C++以外的
    發(fā)表于 01-04 07:31

    C語言回調(diào)函數(shù)原來這么簡單

    ” 這個概念,它是回調(diào)函數(shù)能夠?qū)崿F(xiàn)的重要基礎。 1、函數(shù)指針學習過C語言的伙伴都知道,C語言中的
    發(fā)表于 12-30 06:45

    C語言中實現(xiàn)函數(shù)宏的三種方式

    (0) 不同的是,({}) 不能提前退出函數(shù)宏與支持返回值。({}) 畢竟不是 while 循環(huán),不能直接使用 break退出函數(shù)宏是比較容易理解。那支持返回值是什么意思呢? 答案是 C
    發(fā)表于 12-29 07:34

    如何用好 C 語言函數(shù)的返回值?

    基本上,沒有人會將大段的C語言代碼全部塞入 main() 函數(shù)。更好的做法是按照復用率高、耦合性低的原則,盡可能的將代碼拆分不同的功能模塊,并封裝成函數(shù)。
    發(fā)表于 12-25 07:17

    C語言C++的區(qū)別及聯(lián)系

    創(chuàng)建源文件時什么都不給,默認是.cpp。 3、返回值 C語言中,如果一個函數(shù)沒有指定返回值類型,默認返回int類型;C++中,如果一個函數(shù)
    發(fā)表于 12-24 07:23

    C語言C++之間的區(qū)別是什么

    區(qū)別 1、面向?qū)ο缶幊?(OOP): C語言是一種面向過程的語言,它強調(diào)的是通過函數(shù)將任務分解為一系列步驟進行執(zhí)行。 C++在
    發(fā)表于 12-11 06:23

    C語言的常量介紹

    在程序執(zhí)行過程中,值不發(fā)生改變的量稱為常量。 mtianyan: C語言的常量可以分為直接常量和符號常量。 直接常量也稱為字面量,是可以直接拿來使用,無需說明的量,比如: 整型常
    發(fā)表于 11-24 07:12

    C語言的printf基本用法介紹

    也是代碼的一部分,但是它并不會給程序帶來任何影響,編譯器在編譯階段會忽略注釋的內(nèi)容,或者說刪除注釋的內(nèi)容。我在《C語言標識符、關鍵字和注釋》一節(jié)中做了詳細講解。 3) money 的
    發(fā)表于 11-12 07:04

    變形監(jiān)測包含哪些內(nèi)容?變形監(jiān)測的重要性

    變形監(jiān)測包含哪些內(nèi)容?變形監(jiān)測的核心在于持續(xù)獲取工程結(jié)構(gòu)關鍵部位在空間位置(位移、沉降、傾斜)和內(nèi)部狀態(tài)(應變、裂縫)上的變化信息。下面就讓南京峟思給大家具體的介紹變形監(jiān)測的相關
    的頭像 發(fā)表于 08-27 11:27 ?747次閱讀
    <b class='flag-5'>變形</b>監(jiān)測包含哪些<b class='flag-5'>內(nèi)容</b>?<b class='flag-5'>變形</b>監(jiān)測的重要性

    詳解hal_entry入口函數(shù)

    當使用RTOS時,程序從main函數(shù)開始進行線程調(diào)度;當沒有使用RTOS時,C語言程序的入口函數(shù)main函數(shù)調(diào)用了hal_entry
    的頭像 發(fā)表于 07-25 15:34 ?2243次閱讀

    C語言中的內(nèi)聯(lián)函數(shù)與宏

    C編程中,內(nèi)聯(lián)函數(shù)和宏都用于避免函數(shù)調(diào)用的開銷并編寫可復用的邏輯部分,但它們在工作方式和安全性方面存在顯著差異。
    的頭像 發(fā)表于 07-25 15:10 ?2099次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的內(nèi)聯(lián)<b class='flag-5'>函數(shù)</b>與宏

    深入理解C語言函數(shù)—編程中的“積木塊”藝術(shù)

    在編程的世界里,函數(shù)就像建筑中的“積木塊”——它們是構(gòu)建復雜程序的基石。通過靈活組合這些模塊,開發(fā)者能打造出功能強大且結(jié)構(gòu)清晰的代碼。函數(shù)之所以成為C語言的核心,正是因為它解決了編程中
    的頭像 發(fā)表于 06-30 17:26 ?2086次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>函數(shù)</b>—編程中的“積木塊”藝術(shù)

    【單片機C語言基礎】1、什么是單片機及課程內(nèi)容簡單介紹

    本帖最后由 liuqiangew 于 2025-5-22 21:32 編輯 單片機C語言基礎視頻教程,想要學習的同學可以下載學習,資料包括學習資料和學習視頻。 純分享帖,需要者可點擊附件
    發(fā)表于 05-22 21:29
    开原市| 合川市| 阿图什市| 肥乡县| 双峰县| 庆城县| 新竹县| 松江区| 金坛市| 济宁市| 正阳县| 佛冈县| 监利县| 博白县| 龙岩市| 桦甸市| 融水| 榕江县| 黄梅县| 宜兴市| 北碚区| 稻城县| 门头沟区| 谷城县| 南溪县| 罗源县| 盐山县| 增城市| 北川| 新昌县| 忻州市| 衡阳县| 平乐县| 维西| 西青区| 吴堡县| 文山县| 美姑县| 松滋市| 洮南市| 安义县|