色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

C語言函數不改變形參內容的說明

聚豐開發 ? 2018-10-29 11:01 ? 次閱讀

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


這也是面試時常碰到的題,通常是把一個指針作為函數的輸入參數,在函數內部會改變輸入參數對應的指針,問面試者在函數調用過程中指針的具體內容。


這里我也設計一個這樣的函數,功能是對輸入參數指定的地址連續寫入指定個數的指定內容。問在位置(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作為函數的參數,在函數中有進行遞增操作,為什么函數返回后在位置三還是保持內容為&data_buf[0]不變?


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


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


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


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


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



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


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


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

    關注

    6

    文章

    90

    瀏覽量

    21108
  • 面試題
    +關注

    關注

    1

    文章

    11

    瀏覽量

    8011
收藏 人收藏

    評論

    相關推薦

    LMX2595在不改變設定參數的情況下,能實現多寬范圍的倍頻?

    我想問一下LMX2595在倍頻的過程中,在不改變設定參數的情況下,能實現多寬范圍的倍頻?
    發表于 12-12 07:05

    同樣是函數,在CC++中有什么區別

    同樣是函數,在 CC++ 中有什么區別? 第一個返回值。 C語言函數可以不寫返回值類型,
    的頭像 發表于 11-29 10:25 ?334次閱讀

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?402次閱讀

    C語言中的socket編程基礎

    數據 步驟6:關閉socket 創建socket 在C語言中,創建socket需要使用socket()函數。這個函數需要兩個參數:域
    的頭像 發表于 11-01 16:51 ?344次閱讀

    AIC3106如何在不改變BCLK和LRCLK的情況下,能夠調好?

    你好,請問:AIC3106現在配置為從設備、DAC采樣率為16K、數據寬度為32位。現在主設備給的BCLK是2048K,LRCLK為16K,播放現在有問題,如何在不改變BCLK和LRCLK的情況下,能夠調好?
    發表于 10-28 07:06

    有沒有什么辦法在不改變電源和功率的情況下來解決TPA311XD2失真的問題?

    換了大電源之后就沒有失真了,有沒有什么辦法在不改變電源和功率的情況下來解決芯片失真的問題,謝謝!!!
    發表于 10-25 08:34

    手把手教學!HLK-LD2410B/C新手必看攻略!測試教程、模塊調一文詳解~

    HLK-LD2410B/C接線教程、參數解析、APP調教程、上位機調教程、常見異常情況自檢等等內容,一文匯總。 不管是萌新小白還是資深玩家,都可以快速入門。
    的頭像 發表于 05-31 14:48 ?5220次閱讀
    手把手教學!HLK-LD2410B/<b class='flag-5'>C</b>新手必看攻略!測試教程、模塊調<b class='flag-5'>參</b>一文詳解~

    使用增量式編碼器,在PI參數不改變情況下,為什么MCSDK初始定位后轉速波動大?

    使用增量式編碼器,第一次啟動時,轉速波動較大,然后第二次啟動轉速波動就平穩了,我想問一下,在PI參數不改變情況下,為什么MCSDK初始定位后轉速波動大?
    發表于 03-20 06:03

    C語言內存泄漏問題原理

    內存泄漏問題只有在使用堆內存的時候才會出現,棧內存不存在內存泄漏問題,因為棧內存會自動分配和釋放。C語言代碼中堆內存的申請函數是malloc。
    發表于 03-19 11:38 ?530次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>內存泄漏問題原理

    淺談C語言中的函數定義

    如果函數要使用參數,則必須聲明接受參數值的變量。這些變量稱為函數的形式參數。 形式參數就像函數內的其他局部變量,在進入函數時被創建,退出函數
    發表于 03-11 10:09 ?398次閱讀

    C語言中的可變參數介紹

    C 語言為這種情況提供了一個解決方案,它允許您定義一個函數,能根據具體的需求接受可變數量的參數
    發表于 02-28 14:00 ?322次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的可變參數介紹

    output函數怎么用

    output 函數是一個通用的術語,并不特指某個具體的編程語言或軟件工具。 如果你在使用 Python 編程語言,那么可能是指 print 函數。Python 中的 print
    的頭像 發表于 02-23 14:21 ?1273次閱讀

    C語言中的動態內存管理講解

    本章將講解 C 中的動態內存管理。C 語言為內存的分配和管理提供了幾個函數。這些函數可以在 頭文件中找到。
    的頭像 發表于 02-23 14:03 ?398次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的動態內存管理講解

    c語言,c++,java,python區別

    C語言C++、Java和Python是四種常見的編程語言,各有優點和特點。 C語言
    的頭像 發表于 02-05 14:11 ?2429次閱讀

    如何解決C語言中的“訪問權限沖突”異常?C語言引發異常原因分析

    如何解決C語言中的“訪問權限沖突”異常?C語言引發異常原因分析? 在C語言中,訪問權限沖突異常通
    的頭像 發表于 01-12 16:03 ?5806次閱讀
    主站蜘蛛池模板: jiucao在线观看精品| 国产又粗又黄又爽的大片| 久久热国产在线视频| 在教室伦流澡到高潮H免费视频| 看免费人成va视频全| 99久酒店在线精品2019| 色婷婷国产麻豆AV| 精品国产国偷自产在线观看| 24小时日本高清免费看| 色久悠悠无码偷拍自怕| 国产在线一卡二卡| 99re久久热最新地址一| 同时和两老师双飞| 久久夜色噜噜噜亚洲AV0000| 办公室的秘密2中文字幕| 亚洲 无码 制服 日韩| 免费看 a一级毛片| 国产精品人妻无码久久久2022| 在线自拍亚洲视频欧美| 日韩一区二区三区视频在线观看| 极品少妇伦理一区二区| www.绿巨人| 亚洲人成电影网站在线观看| 欧美美女性生活| 饥渴的40岁熟妇完整版在线| x69老师x日本| 又黄又肉到湿的爽文| 色综合伊人色综合网站下载| 老阿姨儿子一二三区| 国产乱人视频在线观看| 久久无码av三级| 高h超辣bl文| 88蜜桃人妻无码精品系列| 无罩看奶禁18| 欧美精品v欧洲高清| 好男人视频免费高清在线观看www| chinese学生gv video| 影音先锋av色咪影院| 星空无限传媒视频在线观看视频| 女bbbbxxx孕妇| 久久免费大片|