C語言關于函數傳參和返回值的一些想法2(參數可修改的特殊情況)

我最近寫了一篇文章名為“C語言關于函數傳參和返回值的一些想法”(C語言關于函數傳參和返回值的一些想法-CSDN博客),里面提到了一種觀點就是傳參的參數在函數體內部是只讀的,不能寫它,因為如果寫了,也就是污染了傳參值,再也找不到了。正確的做法是定義對應棧內存(也是就臨時變量),并完成一份拷貝。(拷貝的意思是不同的內存變量,但是數據內容是一致的),在函數體內部使用這一份拷貝來操作。

我最近在拜讀一些前同事寫的函數,發現也有某些特殊情況,直接使用了參數變量進行寫操作,我想補充的是這樣操作的前提是程序員知道對參數進行寫操作,在函數體內部相關操作不會有影響,才能操作。我還是建議在函數體內部準備一份拷貝,操作這一份拷貝變量。

案例1:ucoss-ii中恢復優先級的操作

該案例中傳參的prio如果是OS_PRTO_SELF,那么需要查詢OSTCBCur指向結構體的成員值,然后對prio進行寫操作,也就是對參數變量進行寫操作了,不過寫了prio的新值后對后面的相關操作無影響。正規寫法是應以一個INT8U prio_temp的棧內存,然后將查詢的OSTCBCur->OSTCBPrio值寫到這里面去,然后操作這個變量。

案例2:LCD1602驅動函數,打印字符串

void write_lcd_s(INT8U y,INT8U x,char *s) reentrant
{INT8U add = x;if(y == 0)add += 0x80;else add += 0xc0;lcd_write_com(add);while(*s){lcd_write_data(*s++);       /**這里參數也改變了,不過沒有影響,當然常規的寫法是定義一個臨時變量 */}
}

最后while(*s)循環中lcd_write_data(*s++)對參數s的值進行自加運算,用于指向下一個字符。這樣操縱也是可以的,因為參數的傳參的值已經沒用了,而這里需要的是新值。

總結:函數傳參后參數大部分情況是只讀的,因為在函數體內如果對參數再寫操作,傳參值就丟失了,找不到了。如果對參數再次寫操作,而且無影響,也是可以寫的,不過這種寫法的前提就是函數調用的一次傳參數值確定是沒用了。正規的做法就是定義一個臨時變量,然后將參數的值寫到這個臨時變量中,我們在后面的操作去操作這個棧變量。

最后,充分理解“拷貝”的深層含義,意思是:不同的存儲介質,但是存儲大小,存儲類型,以及存儲內容是一致的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93710.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93710.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93710.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端AI對話功能實現攻略

一、對話內容渲染 在前端頁面的 AI 對話場景中,對話內容的渲染效果直接影響用戶的閱讀體驗和交互效率。合理選擇對話格式、優化流式對話呈現、嵌入自定義內容以及實現語音播報等功能,是提升整體體驗的關鍵。 對話格式選擇 MarkDown 作為一種輕量級標記語…

深入理解Redis持久化:讓你的數據永不丟失

1 Redis持久化概述 1.1 什么是Redis持久化 Redis作為一個高性能的內存數據庫,默認情況下數據存儲在內存中,這意味著一旦服務器重啟或發生故障,內存中的數據將會丟失。為了保證數據的持久性和可靠性,Redis提供了持久化機制,將內存中的數據保存到磁盤中。 持久化是Redis實…

IC驗證 AHB-RAM 項目(二)——接口與事務代碼的編寫

目錄準備工作接口相關代碼編寫事務相關代碼編寫準備工作 DVT(Design and Verification Tools)是一款專門為 IC 驗證打造的 IDE 插件,可以理解為智能的 Verilog/System Verilog 編輯器,在 VS Code、Eclipse 軟件中使用。 接口相關…

基于Spring Boot的智能民宿預訂與游玩系統設計與實現 民宿管理系統 民宿預訂系統 民宿訂房系統

🔥作者:it畢設實戰小研🔥 💖簡介:java、微信小程序、安卓;定制開發,遠程調試 代碼講解,文檔指導,ppt制作💖 精彩專欄推薦訂閱:在下方專欄&#x1…

大模型的底層運算線性代數

深度學習的本質是用數學語言描述并處理真實世界中的信息,而線性代數正是這門語言的基石。它不僅提供了高效的數值計算工具,更在根本上定義了如何以可計算、可組合、可度量的方式表示和變換數據。 1 如何描述世界📊 真實世界的數據&#xff08…

Rust 中 i32 與 *i32 的深度解析

Rust 中 &i32 與 *i32 的深度解析 在 Rust 中,&i32 和 *i32 是兩種完全不同的指針類型,它們在安全性、所有權和使用方式上有本質區別。以下是詳細對比: 核心區別概覽 #mermaid-svg-rCa8lLmHB7MK9P6K {font-family:"trebuchet ms…

【PyTorch項目實戰】OpenNMT本地機器翻譯框架 —— 支持本地部署和自定義訓練

文章目錄一、OpenNMT(Neural Machine Translation,NMT)1. 概述2. 核心特性3. 系統架構4. 與其他翻譯工具的區別二、基于 OpenNMT-py 的機器翻譯框架1. 環境配置(以OpenNMT-py版本為例)(1)pip安裝…

基于prompt的生物信息學:多組學分析的新界面

以前總以為綜述/評論是假大空,最近在朋友的影響下才發現,大佬的綜述/評論內容的確很值得一讀,也值得分享的。比如這篇講我比較感興趣的AI輔助生信分析的,相信大家都是已經實踐中用上了,看看大佬的評論,拓寬…

Nacos-8--分析一下nacos中的AP和CP模式

Nacos支持兩種模式來滿足不同場景下的需求:AP模式(強調可用性)和CP模式(強調一致性)。 這兩種模式的選擇主要基于CAP理論,該理論指出在一個分布式系統中,無法同時保證一致性(Consist…

水閘安全監測的主要核心內容

水閘安全監測是指通過一系列技術手段和管理措施,對水閘的結構狀態、運行性能及環境條件進行實時或定期的觀測與評估,以確保水閘在設計壽命期內的安全性和可靠性。其核心目標是及時發現潛在的安全隱患,防止事故發生,保障水利工程的…

嵌入式系統學習Day19(數據結構)

數據結構的概念: 相互之間存在一種或多種特定關系的數據元素的集合。數據之間關系:邏輯關系:集合,線性(1對1,中間位置的值有且僅有一個前驅,一個后繼),樹(1對…

Pandas中數據清理、連接數據以及合并多個數據集的方法

一、簡介1.數據清理的重要性:在進行數據分析前,需進行數據清理,使每個觀測值成一行、每個變量成一列、每種觀測單元構成一張表格。2.數據組合的必要性:數據整理好后,可能需要將多張表格組合才能進行某些分析&#xff0…

JavaSSM框架從入門到精通!第二天(MyBatis(一))!

一、 Mybatis 框架1. Mybatis 框架簡介Mybatis 是 apache 的一個開源項目,名叫 iBatis ,2010 年這個項目由 apache 遷移到了 google,并命名為 Mybatis,2013 年遷移到了 GitHub,可以在 GitHub 下載源碼。2. Mybatis 的下…

Linux下Mysql命令,創建mysql,刪除mysql

在 Linux 系統下,您可以通過命令行來創建和刪除 MySQL 數據庫。以下是詳細的操作步驟,包括創建和刪除數據庫、用戶,以及常見的相關管理命令。1. 登錄 MySQL在執行任何 MySQL 操作之前,需要先登錄 MySQL。1.1 使用 root 用戶登錄 M…

假設檢驗的原理

假設檢驗是統計學中用于判斷樣本數據是否支持某個特定假設的方法。其核心思想是通過樣本數據對總體參數或分布提出假設,并利用統計量來判斷這些假設的合理性。假設檢驗的基本步驟如下:1. 假設(Hypothesis)在統計學中,假…

信號、內存共享等實現

信號&#xff08;signal&#xff09;#include <signal.h> #include <stdio.h> #include <unistd.h>void handler(int sig) {printf("收到信號: %d\n", sig); }int main() {signal(SIGUSR1, handler); // 注冊用戶自定義信號printf("進程 PI…

《從日常到前沿:AI 在教育、醫療、制造業的真實落地案例》文章提綱

引言&#xff1a;AI 落地的多元圖景?簡述 AI 從實驗室走向實際應用的發展趨勢?說明選擇教育、醫療、制造業的原因 —— 覆蓋民生與基礎產業&#xff0c;落地場景具有代表性?AI 在教育領域的落地案例?個性化學習&#xff1a;如某在線教育平臺利用 AI 分析學生學習數據&#…

決策樹(1)

一、樹模型與決策樹基礎決策樹概念&#xff1a;從根節點開始一步步走到葉子節點得出決策&#xff0c;所有數據最終都會落到葉子節點&#xff0c;既可用于分類&#xff0c;也可用于回歸。樹的組成根節點&#xff1a;第一個選擇點。非葉子節點與分支&#xff1a;中間決策過程。葉…

電視系統:開啟視聽新時代

在當今數字化浪潮席卷的時代&#xff0c;電視領域正經歷著一場深刻的變革&#xff0c;而電視系統無疑是這場變革中的耀眼明星。簡單來講&#xff0c;電視系統就是互聯網協議電視&#xff0c;它宛如一座橋梁&#xff0c;巧妙地利用寬帶有線電視網&#xff0c;將多媒體、互聯網、…

字節開源了一款具備長期記憶能力的多模態智能體:M3-Agent

貓頭虎AI分享&#xff5c;字節開源了一款具備長期記憶能力的多模態智能體&#xff1a;M3-Agent 近年來&#xff0c;多模態大模型的發展迅猛&#xff0c;但如何賦予智能體類似人類的長期記憶能力&#xff0c;一直是研究中的核心挑戰。字節跳動開源的 M3-Agent&#xff0c;正是面…