用指標作為引數傳值是不是更節省記憶體?(c/c++/golang)
不一定。
當引數傳入到函式中時,函式會在棧空間中,為函式引數開闢對應的記憶體。
如果傳入的是指標,那麼系統會為該引數分配指標型別大小的空間,比如32位機就是4個位元組。
而傳入的變數,分配空間大小就是實際佔用的大小。比如char就是1個位元組,short就是2個位元組,double就是8個位元組等。
可以看到,指標和實際變數比較佔用空間並沒有絕對的大小關係。如果引數是字元型char,那麼直接用char比用指標更省記憶體。
所以具體何種方式更省記憶體,還需要看引數真正的sizeof值才可以。
-
節省儲存,因為不用產生實際引數的函式區域性副本
-
減輕函式呼叫的時間開銷,因為不用呼叫拷貝複製等建構函式
-
允許函式有能力修改實際引數
但也要看傳進來的值是什麼型別。在32位機器中一般指標佔四個位元組,如果你傳入的是小於四個位元組的型別,當然不會比直接值傳遞節省記憶體。
相關推薦
用指標作為引數傳值是不是更節省記憶體?(c/c++/golang)
不一定。 當引數傳入到函式中時,函式會在棧空間中,為函式引數開闢對應的記憶體。 如果傳入的是指標,那麼系統會為該引數分配指標型別大小的空間,比如32位機就是4個位元組。 而傳入的變數,分配空間大小就是實際佔用的大小。比如char就是1個位元組,short就是2個位元組,double就是8個位元組等。
c++ 用指標將函式作為引數傳參
今天發現了一種寫法,順便記錄一下。廢話不多說,先看程式碼: #include <iostream> using namespace std; int addition(int x, int y){ return x + y; } int subt
java中包的理解,普通類、抽象類、介面作為方法引數傳值情況,作為返回值的傳遞情況。
一、包的概念 用於存放類檔案,包含原始檔還有.class檔案。通過包的分類管理讓功能相同的類放在一個資料夾裡。作用:為類檔案進行分類管理。 二、包的宣告格式 通常使用公司網址反寫。包名全部採用小寫字母。多層包用.連線。包的宣告必須在有效程式碼的第一行。 導包: impo
用Ajax 進行Post多引數傳值
用Ajax 進行Post傳值 以下程式已除錯通過: <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled D
以指標作為函式引數,不能改變實參指標變數的值從而改變實參值
如題,這是因為 :1,按值傳遞,在呼叫函式的時候,將指向資料的指標實參傳遞到呼叫函式的形參中去2,單向傳遞,形參中的指標子函式改變地址後不能傳給主調函式,變數同樣指向了我們希望處理的資料,然後對形參的指標變數指向的資料進行各種希望的處理,在呼叫函式執行完成後,各個形參指標變數
【第8天】Java方法過載、方法重寫(覆蓋)、構造方法及引數傳值
1 方法過載(overload) 2 方法重寫(覆蓋)(override) 3 構造方法 4 引數傳值 1 方法過載(overload) 方法過載的作用? 同時滿足使用者的不同需求。 同一個方法,使用者可以傳入不同
基本型別引數傳值(持續整理中)
一 、值傳遞 測試: 分析: 值傳遞的過程中會給形參分配一個同等型別的記憶體空間,將實參的內容深拷貝到為該形參分配的記憶體空間中,後續都是對形參的這塊空間進行操作,對實參的記憶體空間沒有影響; 二 、引用傳值 測試: 分析: 引用傳值,在函式中不用重新分配一個型別空間,形
Java的知識點10——static關鍵字、靜態初始化塊、 引數傳值機制、包、匯入類import、 靜態匯入
static 關鍵字 在類中,用static宣告的成員變數為靜態成員變數,也稱為類變數。 類變數的生命週期和類相同,在整個應用程式執行期間都有效。它有如下特點: 1. 為該類的公用變數,屬於類,被該類的所有例項共享,在類被載入時被顯式初始化。 2. 對於該類的所
React Link 帶引數傳值
2018年11月09日 13:23:32 obf13 閱讀數:12 標籤: React 傳參
用指標作為形式引數的氣泡排序
問題及程式碼: #include <stdio.h> #include <stdlib.h> void bubblesort(int *,int); int main() { int i,a[10]={3,5,9,1,3,6,-9,-7,10
ABAP 用指標的方式賦值內表
一般給內表賦值的話我們可以選擇append的方式,也可以使用指標對內表賦值,此處記錄一下如何使用指標為內表賦值 LOOP AT lt_tab_out ASSIGNING <fs_out> WHERE aufnr NE space. READ TA
JAVA學習筆記 引數傳值機制
一。程式碼 public class user3 {int id;String name;String pass;static String company;public user3(int id,String name){ this.id=id; this.name=name;}public v
JavaScript各種定向攜帶引數傳值問題。(window.location.href)
帶變數 string id = Request.QueryString["id"].ToString(); Response.Write("<script>alert('成功');window.location.href('reply.aspx?word_id=
thinkphp中的url引數傳值問題
<?php namespace app\index\controller; class Index{ public function index(){ return
iOS巔峰之兩個App之間相互呼叫並攜帶引數傳值
1、新建兩個專案:AppOne,AppTwo; 2、分別在其屬性列表中新增如下: AppOne: AppTwo: AppOne的 viewController.m 中新增程式碼: - (void) touchesBegan:(NSSet *)
用指標給陣列賦值的一個小問題
問題是這樣的, 我打算輸入與元素為陣列賦值, 然後反向輸出陣列元素# include <stdio.h> int main(void) { int a[10], * p = a
javascript中函式字元引數傳值報錯
<button class="btn btn-dangerous btn-mini" type="button" onclick="deleteById(${stu.id })">刪除&
powershell指令碼,命令列引數傳值,並繫結變數的例子
這是小技巧文章,所以文章不長。但原創唯一,非常重要。我搜了下,還真沒有人發 powershell怎樣 【命令列 引數 繫結】,所以我決定寫成部落格。 搜尋關鍵字如下: powershell 命令列 引數 繫結 powershell 傳入 引數 powershell 傳遞 引數 p
java方法引數傳值
傳值還是傳引用是Java中很基礎的一個問題,也是筆試的時候經常被考察的一個問題,總結一下。題目1: 寫出以下程式的輸出內容。按 Ctrl+C 複製程式碼public class Test {public static void changeValue(int value){v
asp.net中URL引數傳值中文亂碼的三種解決辦法
一般來說。設定web.config檔案就可以了。但是如果你用 JavaScript 呼叫 webservice 方法的話(往webservice裡面傳遞中文引數)。設定 web.config 檔案好象無效。 (adsbygoogle = window.adsbygoogle |