c語言指針入門(二)

????今天學習了指針的兩個常用場景,在此記錄,以便后續查看。

場景1:傳數組

????在c語言中,我們在定義函數的時候是沒有辦法直接傳一個數組進去的,為了解決這個問題,我們一般將數組的名稱當作一個指針參數傳入到函數的參數列表中,因為數組的名稱類似于一個常量指針,將其傳入函數后,再傳入數組的長度,就可以在函數內部訪問這個數組。原因在于,指針記錄的是一個地址,我們將這個地址作為一個參數傳入方法內部時,相當于這個方法也訪問到了這個地址,進而可以訪問到這個數組。但這里有一個問題,我們一般在調用子函數時,傳入的參數一般都是重新找一塊地址將參數內容復制,子函數使用的是復制的部分,這樣子函數就不會改變外部參數的值。但現在用指針的話,就不會進行復制了,而是直接訪問同一地址,這樣就可能對原數組進行更改。解決方法就是在傳參時,給傳入的指針前加上const,表示只讀。這樣原數組就不會被改變,如果子函數中嘗試改變原數組,系統就會報錯。舉例如下:

#include?<stdio.h>int?CAL(int?*p,int?count) {int?total = p[0];for?(int?i = 1; i < count; i++){total += p[i];}return?total;}int?main() {int?a[] = {1,2,3,4,5};int?b=CAL(a,5);printf("%d\n",b);return?0;}

結果:15

場景2:傳回多個參數

????我們在聲明函數時,c語言一般只能返回一個值,像其他語言,比如C#中,我們可以使用out參數來返回多個值,但c語言沒有這種參數,我們一般用指針來進行多個參數的返回。就像上面說的,指針會指向一個地址,我們在傳入參數時,我們假設想返回兩個值,那我們就給函數傳入兩個指針,我們在內部改變這兩個指針地址所存的數據后,我們在函數外部訪問這個兩個地址即可,即可完成多個參數的返回。舉例如下:

#include?<stdio.h>void?TwoTotal(int?*p,int?count1,int?*q,int?count2,int?*pp,int*qq) {*pp?= p[0];for?(int?i = 1; i < count1; i++){*pp?+= p[i];}*qq?= p[0];for?(int?i = 1; i < count2; i++){*qq?+= q[i];}}int?main() {int?p[] = { 1,2,3,4,5 };int?q[] = {1,2,3,4,5,6,7};int?total1 = 0;int?total2 = 0;TwoTotal(p,5,q,7,&total1,&total2);printf("%d\n", total1);printf("%d\n", total2);return?0;}

結果:

15

28

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

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

相關文章

mysql主從復制的步驟和使用到的操作命令有哪些?

步驟&#xff1a; 配置主服務器&#xff08;Master&#xff09;&#xff1a; 啟用二進制日志記錄&#xff08;binary logging&#xff09;。配置主服務器的唯一標識&#xff08;server-id&#xff09;。創建用于復制的專用復制賬戶。 配置從服務器&#xff08;Slave&#xff0…

安裝Pnetcdf順便升級autoconf與automake

Netcdf NetCDF&#xff08;Network Common Data Form&#xff09;是一種用于存儲科學數據的文件格式和軟件庫。它是一種自描述、可移植且可擴展的數據格式&#xff0c;廣泛應用于氣象學、海洋學、地球科學和其他領域的科學研究。 NetCDF文件以二進制形式存儲&#xff0c;結構…

Qt | QGridLayout 類(網格布局)

01、上節回顧 Qt | QBoxLayout 及其子類(盒式布局)02、QGridLayout 簡介 1、網格布局原理(見下圖): 基本原理是把窗口劃分為若干個單元格,每個子部件被放置于一個或多個單元格之中,各 單元格的大小可由拉伸因子和一行或列中單元格的數量來確定,若子部件的大小(由 sizeH…

Vue從入門到實戰 Day08~Day10

智慧商城項目 1. 項目演示 目標&#xff1a;查看項目效果&#xff0c;明確功能模塊 -> 完整的電商購物流程 2. 項目收獲 目標&#xff1a;明確做完本項目&#xff0c;能夠收獲哪些內容 3. 創建項目 目標&#xff1a;基于VueCli自定義創建項目架子 4. 調整初始化目錄 目…

網絡安全之BGP詳解

BGP&#xff1b;邊界網關協議 使用范圍&#xff1b;BGP范圍&#xff0c;在AS之間使用的協議。 協議的特點&#xff08;算法&#xff09;&#xff1a;路徑矢量型&#xff0c;沒有算法。 協議是否傳遞網絡掩碼&#xff1a;傳遞網絡掩碼&#xff0c;支持VLSM&#xff0c;CIDR …

【15】編寫shell-安裝mysql

說明: 1、請注意mysql版本的壓縮包格式 2、請注意掛載data盤 3、請注意部署包和shell腳本放在同一個文件夾 4、實現shell腳本自動化部署mysql5.7.40版本 # !/bin/bash#****************************************************** # Author : 秋天楓葉35 # Last modified …

Spring Boot 中 對話 Redis

Redis 是一款開源的&#xff0c;使用 C 開發的高性能內存 Key/Value 數據庫&#xff0c;支持 String、Set、Hash、List、Stream 等等數據類型。它被廣泛用于緩存、消息隊列、實時分析、計數器和排行榜等場景。基本上是當代應用中必不可少的軟件&#xff01; Spring Boot 對 Re…

oracle正則的使用

1、建表 create table person (first_name varchar2(20),last_name varchar2(20),email varchar2(40),zip varchar2(20)); insert into PERSON (first_name, last_name, email, zip) values (Steven, Chen, stevenhp.com, 123456); insert into PERSON (first_name, last_name…

ASP+ACCESS基于B2C電子商務網站設計

摘 要 運用ASP技術結合了Access數據庫原理&#xff0c;基于B/S模式我們開發了一個網上購物系統。在我們的系統中&#xff0c;顧客可以很方便的注冊成為會員&#xff0c;對商品進行瀏覽檢索&#xff0c;查看商品的詳細資料&#xff0c;然后根據各人的喜好購買心儀的商品。系統…

CCF20220901——如此編碼

CCF20220901——如此編碼 代碼如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,m,cnt1,a[1000],c[1000]{1};cin>>n>>m;for(int i1;i<n;i){cin>>a[i];cnt*a[i];c[i]cnt;}int b[1000]{0};for(int i1;i<n;i)b[i](…

JPHS-JMIR Public Health and Surveillance

文章目錄 一、期刊簡介二、征稿信息三、期刊表現四、投稿須知五、投稿咨詢 一、期刊簡介 JMIR Public Health and Surveillance是一本多學科期刊&#xff0c;專注于公共衛生創新與技術的交叉領域&#xff0c;包括公共衛生信息學、監測&#xff08;監測系統和快速報告&#xff…

CCF20220601——歸一化處理

CCF20220601——歸一化處理 代碼如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,a[1000],sum0;scanf("%d",&n);for(int i1;i<n;i){scanf("%d",&a[i]);suma[i];}double aver1.0,b0.0,d1.0;aversum/(n*1…

Java基礎(三)- 多線程、網絡通信、單元測試、反射、注解、動態代理

多線程基礎 線程&#xff1a;一個程序內部的一條執行流程&#xff0c;只有一條執行流程就是單線程 java.lang.Thread代表線程 主線程退出&#xff0c;子線程存在&#xff0c;進程不會退出 可以使用jconsole查看 創建線程 有多個方法可以創建線程 繼承Thread類 優點&#x…

【學習】實驗室服務器常用的Linux指令。

1. 下載GitHub代碼。 使用代碼&#xff1a; git clone https://github.com/Turoad/CLRNet.git2. 壓縮 / 解壓。 打包壓縮 是日常工作中備份文件的一種方式 在不同操作系統中&#xff0c;常用的打包壓縮方式是不同的選項 含義 Windows 常用 rarMac 常用 zipLinux 常用 tar.gz…

學碩都考11408的211院校!河北工業大學計算機考研考情分析!

河北工業大學&#xff08;Hebei University of Technology&#xff09;&#xff0c;簡稱河北工大&#xff0c;坐落于天津市&#xff0c;由河北省人民政府、天津市人民政府與中華人民共和國教育部共建&#xff0c; 隸屬于河北省&#xff0c;是國家“雙一流”建設高校、國家“211…

自動化測試在軟件開發生命周期中如何提高代碼質量?

自動化測試是一種在軟件開發生命周期中使用軟件工具來執行測試的方法&#xff0c;它可以大大提高代碼質量&#xff0c;減少開發過程中的錯誤和缺陷。本文將從零開始&#xff0c;詳細且規范地介紹如何使用自動化測試來提高代碼質量。 第一步&#xff1a;明確測試目標 在開始自…

webgl入門-繪制三角形

繪制三角形 前言 三角形是一個最簡單、最穩定的面&#xff0c;webgl 中的三維模型都是由三角面組成的。咱們這一篇就說一下三角形的繪制方法。 課堂目標 理解多點繪圖原理。可以繪制三角形&#xff0c;并將其組合成多邊形。 知識點 緩沖區對象點、線、面圖形 第一章 web…

Python高克勒-曼寧-斯特里克勒公式計算一維流量

&#x1f4dc;曼寧公式-用例 &#x1f4dc;Python流體數據統計模型和淺水滲流平流模型模擬 | &#x1f4dc;Python蒸發散物理問題(微積分-線性代數-拉普拉斯和傅立葉變換) ??Python計算一維流量 高克勒-曼寧-斯特里克勒公式公式基于一維&#xff08;橫截面平均&#xff09…

iPhone實況照片從Windows資源管理器復制的JPG+MOV無法正常還原到iPhone

背景&#xff1a; 之前使用的iPhone 15 Pro&#xff0c;使用的Windows資源管理器當中復制導出的實況照片&#xff0c;復制出來的格式例如IMG_0001.JPG, IMG_0001.MOV。之后手機就賣掉了。現在使用的iPhone 14 Pro Max&#xff0c;想要導回之前備份的實況照片。嘗試使用愛思助手…

Java18新特性

Java 18引入了若干新特性&#xff0c;以增強語言的功能性和性能。具體如下&#xff1a; 服務提供者接口&#xff08;Service Provider Interfaces, SPI&#xff09;&#xff1a;允許開發者為Java模塊系統定義服務加載機制&#xff0c;從而能夠更靈活地發現和加載服務實現。簡單…