【和春筍一起學C++】函數——C++的編程模塊

目錄

1. 原型句法

2. 函數分類

3. 函數參數之按值傳遞

4. 數組作為函數參數


在C++中,要使用函數,必須要有這三個方面:

  1. 函數原型,函數原型描述了函數到編譯器的接口,函數原型一般放在include文件中。函數原型告訴編譯器需要提供什么樣的形參,如果程序沒有提供這樣的形參,原型將讓編譯器能夠捕獲這種錯誤。
  2. 函數定義。
  3. 調用函數,函數調用是一個語句。

可能很多初學者會問,有了函數定義為什么需要函數原型?

C++允許一個程序放在多個文件中單獨編譯,然后再將它們組合起來。在這種情況下,編譯器在編譯main()函數時,可能無法訪問函數定義的代碼。

總的來說,函數原型有3個作用:

  1. 使編譯器能正確處理函數返回值;
  2. 使編譯器能檢查使用的參數數目是否正確;
  3. 使編譯器能檢查使用的參數類型是否正確;

避免使用函數原型的唯一方法是在main()函數之前定義它。但C++的編程風格是將main()函數放在最前面,因為它通常提供了程序的整體風格。

1. 原型句法

  • 原型句法是一條語句,因此必須以分號結束;
  • 獲得原型最簡單的方法是復制函數定義中的函數頭,并添加分號;
  • 函數原型不要求提供變量名,有類型列表即可。參數列表可以包括變量名,也可以不包括變量名,原型中的變量名相當于占位符,不必與函數定義中的變量名相同。在函數定義中形參變量名一般用_a, _b, _c形式的命名方式。

C++占位符相關知識:

(1)auto:在C++11及以后,auto可以為類型占位符,由編譯器推導類型。如:

auto x=2; //x被推導為int類型

(2)格式化輸出時,占位符用于指定變量插入的位置和格式,如:

printf("Number: %d, string: %s", 2, "hello");

2. 函數分類

函數分為兩類:

  • 沒有返回值的函數,稱為void函數,通用格式為:
void functionName(paralist)
{statements;return;//optional
}
  • 有返回值的函數,通用格式為:
typeName functionName(paralist)
{statements;return value;//optional
}

對于有返回值的函數,必須使用返回語句,以便將返回值傳遞給調用函數。C++對于返回值的類型有一定的限制,不能是數組,但可以是其他任何類型——整型,浮點型,指針,甚至可以是結構體和對象。(雖然C++不能直接返回數組,但可以將數組作為結構體或對象的組成部分來返回)

返回語句也可以是一個表達式。

3. 函數參數之按值傳遞

按值傳遞的函數參數,形參使用的是實參數據的拷貝,在函數中改變形參的值不會改變實參的值。

在函數中聲明的變量(包括形參)都是該函數私有的。在函數被調用時,計算機將為這些變量分配內存,函數調用結束后,這些變量所占用的內存被釋放,這樣的變量被稱為局部變量,因為它們被限制在函數中,也被稱為自動變量,因為它們的內存在程序執行過程中自動分配和自動釋放的,不需要人為干預。

4. 數組作為函數參數

將數據作為函數參數時,需要將數組的大小一并傳遞,因為數組名只代表了數組的首地址,如果不傳遞數組長度,函數就無法數組的長度。以下實例可以更好的了解數組作為函數參數時為何一定要把長度也傳遞給函數。

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int sum_arr(int arr[], int n);
int main()
{int cookies[6] = { 1,2,4,6,8,10 };cout << "size of cookers: " << sizeof(cookies) << endl;cout << "size of cookers[0]: " << sizeof(cookies[0]) << endl;cout << "size of &cookers[0]: " << sizeof(&cookies[0]) << endl;int sum = sum_arr(cookies, 6);cout << "sum: " << sum << endl;return 0;
}int sum_arr(int arr[], int n)
{int total = 0;cout << "size of arr: " << sizeof(arr) << endl;for (int i = 0; i < n; i++){total = total + arr[i];}return total;
}

以下為輸出結果,cookies=24表示數組所占的字節數為24,cookies[0]=4表示第一個元素所占的字節數為4,因為數組總共有6個元素,所以沒有問題。 &cookies[0]表示的是數組的首地址,大小為8個字節,傳遞給函數時使用的是數組名,在函數中輸出arr的大小也是8個字節,說明數組名作為函數參數時只傳遞數組的地址(首地址),不會傳遞整個數組所有的元素值。

?將實例代碼中的函數調用換成如下參數:

int sum = sum_arr(cookies+2, 3);

表示傳遞的是數組第3個元素的地址,并且設置了數組的長度為3,即只求第3,4,5三個元素的和,所以結果應該是18,程序運行結果如下:

?

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

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

相關文章

深挖Java基礎之:認識Java(創立空間/先導:Java認識)

今天我要介紹的是在Java中對Java的一些基本語法的認識與他們的運用&#xff0c;以及擬舉例子說明和運用場景&#xff0c;優勢和劣勢&#xff0c; 注&#xff1a;本篇文章是對Java的一些基本的&#xff0c;簡單的代碼塊的一些內容&#xff0c;后續會講解在Java中的變量類型&…

Python+Selenium+Pytest+Allure PO模式UI自動化框架

一、框架結構 allure-report&#xff1a;測試報告base&#xff1a;定位元素封裝data&#xff1a;數據log&#xff1a;日志文件page&#xff1a;頁面封裝文件夾report&#xff1a;緩存報告testcases&#xff1a;測試用例層utils&#xff1a;工具類run.py&#xff1a;執行文件 二…

博物館除濕控濕保衛戰:M-5J1R 電解除濕科技如何重塑文物守護的未來

在盧浮宮幽深的長廊里&#xff0c;達芬奇的《蒙娜麗莎》正經歷著一場看不見的戰爭——不是來自時間的侵蝕&#xff0c;而是空氣中無形的水分子。每一件文物都在與濕度進行著無聲的抗爭&#xff0c;這場抗爭關乎人類文明的延續。濕度&#xff0c;這個看不見的文物殺手&#xff0…

【嘉立創EDA】如何找到曲線和直線的交點,或找到弧線和直線的交點

文章路標?? :one: 文章解決問題:two: 主題內容:three: 參考方法be end..1?? 文章解決問題 操作環境:嘉立創EDA專業版 V2.2.38 本文使用嘉立創EDA,描述如何快速找到曲線和直線交點的方法,這里的曲線包括了弧線等。本文將此過程記錄,以供有需要的讀者參考。 2?? 主題…

大語言模型能否替代心理治療師的深度拓展研究:fou

大語言模型能否替代心理治療師的深度拓展研究 在科技初創企業和研究領域,大型語言模型(LLMs)用于替代心理健康服務提供者的應用備受關注。但研究人員通過對主要醫療機構治療指南的梳理回顧,并對當前 LLMs(如 gpt-4o)進行實驗評估后發現,LLMs 存在對心理疾病患者表達污名…

【linux】Chrony服務器

簡介 1.1 時間的重要性 由于 IT 系統中&#xff0c;準確的計時非常重要&#xff0c;有很多種原因需要準確計時&#xff1a; 在網絡傳輸中&#xff0c;數據包括和日志需要準確的時間戳 各種應用程序中&#xff0c;如訂單信息&#xff0c;交易信息等 都需要準確的時間戳 1.2 時區…

mysql查看哪些表的自增id已超過某個值

場景 想看哪些表數據比較大&#xff0c;如果用count 比較慢&#xff0c;同時表設計如果是自增&#xff0c;有沒有辦法一次查出自增id已超過某值的所有表呢。 方法 SELECT AUTO_INCREMENT,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA 庫名 AND AUTO_INCRE…

SiamMask原理詳解:從SiamFC到SiamRPN++,再到多任務分支設計

SiamMask原理詳解&#xff1a;從SiamFC到SiamRPN&#xff0c;再到多任務分支設計 一、引言二、SiamFC&#xff1a;目標跟蹤的奠基者1. SiamFC的結構2. SiamFC的局限性 三、SiamRPN&#xff1a;引入Anchor機制的改進1. SiamRPN的創新2. SiamRPN的進一步優化 四、SiamMask&#x…

SpringBoot終極形態:AI生成帶OAuth2鑒權的微服務模塊(節省20人日)

在數字化轉型的浪潮中,開發效率和質量是企業競爭力的關鍵要素。飛算 JavaAI 作為一款創新的 AI 工具,能在 Spring Boot 開發中,自動生成完整微服務模塊,極大提升開發效率。下面,我們就詳細介紹如何借助飛算 JavaAI,實現 Spring Boot 微服務模塊的自動化生成。 飛算 JavaAI 簡介…

Spring緩存注解深度實戰:3大核心注解解鎖高并發系統性能優化?

引言&#xff1a;緩存——高并發系統的“性能加速器”? 在互聯網應用中&#xff0c;數據庫查詢往往是性能瓶頸的核心。當每秒數千次的請求直接沖擊數據庫時&#xff0c;系統響應速度會急劇下降&#xff0c;甚至引發宕機風險。?緩存技術?應運而生&#xff0c;成為解決這一痛…

CSS元素動畫篇:基于當前位置的變換動畫(二)

基于當前位置的變換動畫&#xff08;二&#xff09; 前言旋轉效果類元素動畫搖擺動畫效果效果預覽代碼實現 搖晃動畫效果效果預覽代碼實現 螺旋旋轉效果預覽代碼實現 結語 前言 CSS元素動畫一般分為兩種&#xff1a;一種是元素基于當前位置的變換動畫&#xff0c;通過不明顯的…

Qt/C++開發監控GB28181系統/設備注冊/設備注銷/密碼認證/心跳保活/校時

一、前言 根據gb28181協議文檔&#xff0c;第一步就是需要實現設備的注冊&#xff0c;和onvif不同&#xff0c;gb是反過來的&#xff0c;設備端主動連接服務端&#xff0c;而onvif是服務端主動發出搜索&#xff0c;設備被動應答&#xff0c;包括后續的交互幾乎都是被動應答&am…

MATLAB 中的圖形繪制

一、線圖 plot 函數用來創建x和y值的簡單線圖。 x 0 : 0.05 : 30; %從0到30&#xff0c;每隔0.05取一次值 y sin(x); plot(x,y,LineWidth,2) %若&#xff08;x&#xff0c;y&#xff0c;LineWidth&#xff0c;2&#xff09;可變粗 xlabel("橫軸標題") ylab…

go語言八股文(五)

1.go的局部變量是分配在棧上還是在堆上 在Go語言中&#xff0c;局部變量的內存分配&#xff08;棧或堆&#xff09;由編譯器基于逃逸分析&#xff08;escape analysis&#xff09;來決定。以下是總結和具體示例&#xff1a; 棧上分配 當局部變量的生命周期嚴格限定在函數作用…

Gradients of Matrix-Matrix Multiplication in Deep Learning

Gradients of Matrix-Matrix Multiplication in Deep Learning 1. Matrix multiplication2. Derivation of the gradients2.1. Dimensions of the gradients2.2. The chain rule2.3. Derivation of the gradient ? L ? A \frac{ {\partial L} }{ {\partial \boldsymbol {\bo…

Spring Boot 框架簡介

? Spring Boot 框架簡介 1?? &#x1f680; 快速構建 Spring Boot 能夠快速構建可直接運行的、企業級 Spring 應用。 2?? ?? “約定優于配置” 該框架采用"約定優于配置"理念&#xff0c;默認集成 Spring 平臺與主流第三方庫&#xff0c;開發者僅需簡單配置…

【Robocorp實戰指南】Python驅動的開源RPA框架

目錄 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊說明技術選型對比 二、實戰演示環境配置要求核心代碼實現案例1&#xff1a;網頁數據抓取案例2&#xff1a;Excel報表生成 運行結果驗證 三、性能對比測試方…

如何使用 Spring Boot 實現分頁和排序:配置與實踐指南

在現代 Web 應用開發中&#xff0c;分頁和排序是處理大量數據時提升用戶體驗和系統性能的關鍵功能。Spring Boot 結合 Spring Data JPA 提供了簡單而強大的工具&#xff0c;用于實現數據的分頁查詢和動態排序&#xff0c;廣泛應用于 RESTful API、后臺管理系統等場景。2025 年&…

使用 LLM助手進行 Python 數據可視化

在數據科學中&#xff0c;數據可視化是一項至關重要的任務&#xff0c;旨在揭示數據背后的模式和洞察&#xff0c;并向觀眾傳達這些信息。然而&#xff0c;在編程語言&#xff08;如 Python&#xff09;中創建有洞察力的圖表有時可能會耗時且復雜。本文介紹了一種借助 AI 助手&…

RASP技術是應用程序安全的“保護傘”

對于企業組織而言&#xff0c;隨著新技術的不斷涌現&#xff0c;企業在應用程序和數據安全方面也面臨著諸多挑戰。之所以如此&#xff0c;是因為常見的保護措施&#xff0c;如入侵防御系統和Web應用程序防火墻&#xff0c;有助于檢測和阻止網絡層的攻擊&#xff0c;但它們無法看…