1. 程式人生 > >物件作為引數的值傳遞與地址傳遞

物件作為引數的值傳遞與地址傳遞

1.沒有明確宣告為指標或者引用,都是值傳遞,會呼叫物件過載的=,建立新的物件。

2.當指定為指標型別的時候為傳遞的是指標(地址),指定引數型別為引用的時候,傳遞的也是地址。

#include<stdio.h>struct AA{int a;char b;};void ch(AA aa)//傳遞物件{aa.a=2;}void change(AA &aa)//傳遞引用{aa.a=2;}void main(){AA a;a.a=1;a.b='b';ch(a);//值傳遞不改變a.a的值printf("%d\n",a.a);change(a);//指標傳遞改變a.a的值printf("%d\n",a.a);
}

結果:

12

補充:什麼叫值傳遞?

int swap(int a, int b) //交換a,b的值
{
int temp = a;
a = b;
b = a;
}

void main()
{
int m = 10, n =20;
swap(m,n);
cout<<m<<endl;
cout<<n<<endl;
//這裡m還是10,n還是20,因為傳給swap的其實是m,n的拷貝,swap改變的是m和n的拷貝的值,並沒有改變m,n的值,因為swap的引數是按值傳遞的。

相關推薦

物件作為引數的值傳遞地址傳遞

1.沒有明確宣告為指標或者引用,都是值傳遞,會呼叫物件過載的=,建立新的物件。2.當指定為指標型別的時候為傳遞的是指標(地址),指定引數型別為引用的時候,傳遞的也是地址。#include<stdi

## 標題:指標的值傳遞地址傳遞,全域性變數傳遞形參傳遞的區別結果

標題:指標的值傳遞與地址傳遞,全域性變數傳遞,與形參傳遞的區別與結果 1.值傳遞與地址傳遞 下面看著段程式碼:void swap(int a, int b){ int t; t=a; a=b; b=t; } void swap1(int *p1,int *p2){ int t; t=*p

傳遞地址傳遞

作為開發人員,入門級的理解,就是值傳遞和地址傳遞的區別,這是C語言中的基礎。今天通過一個oc的demo理解一下面向物件中的值傳遞和地址傳遞,首先定義一個自定義類MyFunction,定義值傳遞和地址傳遞的方法 -(int)byValue:(int)x { x++; return x

C語言引數傳遞----值傳遞地址傳遞

最近開始復(yu)習(xi)C語言,看到引數傳遞這裡,又遇到了以前一直沒有搞清楚的一個問題,我相信這個問題大家許多初學者也會遇到過,就是C語言函式的引數傳遞方式。 C語言中引數的傳遞有兩種方式: 1)值傳遞 2)地址傳遞 3)陣列作為函式引數 這裡用兩

徹底高清值傳遞地址傳遞的區別

1. 考題一:程式程式碼如下:void Exchg1(int x, int y)  {  int tmp;  tmp=x;  x=y;  y=tmp;  printf(“x=%d,y=%d/n”,x,y)}void main(){  int a=4,b=6;  Exchg1

java 值傳遞地址傳遞(引用)的區別

JAVA傳遞引數有兩種方式:值傳遞和引用傳遞 值傳遞是傳遞資料:如基本資料型別都是值傳遞 引用傳遞是把形參和實參的指標指向了堆中的同一物件,物件的引用和陣列的引用。 注意: 實參,J

函式的值傳遞地址傳遞--以輸入三個數並從小到大排列為例

一、值傳遞 #include <stdio.h> //自定義函式實現三個數從小到大排列 //值傳遞 //編者:wsg void sort(int a, int b, int c) { int t; if(a>b) { t = a;

C#數值傳遞引用傳遞問題(我們需要時刻溫習基礎知識)

C#引數值傳遞與引用傳遞問題,太久沒有關注這些基礎的C#知識,導致很多東西都忘了,幸好有公司小培訓幫助補充了這些。 本次例子以傳遞類物件引數,對類物件的屬性值進行寫操作。(接著昨天寫序列化的程式碼來寫的)     class Program     {         p

C#--第四周實驗--任務2--定義一個描述座標點的CPoint類,利用(預設數值)建構函式傳遞引數。(控制檯應用)

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱:定義一個描述座標點的CPoint類,利用建構函式傳遞引數。 * 作 者: 雷恆

C語言地址傳遞傳遞

  1、在C語言中,所有非陣列形式的資料實參都是以值傳遞的形式呼叫,在值傳遞的過程中,被呼叫函式的形式引數被視為該函式的區域性變數,即在記憶體的堆疊中開闢空間以存放由主調函式放進來的實參的值,從而成為了實參的一個拷貝。所以被呼叫函式不能修改作為實參的實際變數的值,而只能修改

Java值傳遞地址傳遞:關於String型別和集合型別作為函式引數時傳值問題的測試

這個問題,可能是太簡單了。稍微有點經驗的,估計都不會犯這個錯誤。不好意思,過了個年,幾天不寫程式碼,生疏了,也就有了下面的bug。先看程式碼,你要是一眼就看出問題了,那就請允許在下水那麼一回。 基本資

辨析地址傳遞傳遞

作者想通過如下程式碼來為變數a申請記憶體,並將其指向的值改為5. #include <stdio.h> void foo(int * value) { value=(int *)malloc(4); *value = 5; } int main(

C++物件賦值C#物件賦值----C++C#值傳遞引用傳遞淺析

在C#中,看下面一段程式: class A     {         public int value;         public A(int x)         {             value = x;         }         public

PHP-變數(二)(變數值傳遞引用傳遞,及值傳遞轉換成引用傳遞)

1. PHP 中的資料型別簡單介紹 在講解 值傳遞 和 引用傳遞 之前,先來了解下 php 中的資料型別 php 中的資料型別大體分為三類: ① 標量資料型別:字串型、整型、

Java——值傳遞引用傳遞

color 16px code mar 變量 參數傳遞 形參 函數 ava 1.基本類型和引用類型在內存中的保存 (1)基本類型的變量保存原始值,即它代表的值就是數值本身;    基本類型在聲明變量時就為它分配了空間;    基本類型在參數傳遞過程中屬於值傳遞,也就是復

傳遞引用傳遞

double 字符 浮點型 ima 原來 例子 布爾 println private 基本數據類型 (屬於值傳遞) 整型:byte,short,int,long 浮點型:float,double 字符型:char 布爾型:boolean 引用數據

面試再問值傳遞引用傳遞,把這篇文章砸給他!

java的值傳遞和引用傳遞在面試中一般都會都被涉及到,今天我們就來聊聊這個問題,首先我們必須認識到這個問題一般是相對函式而言的,也就是java中的方法引數,那麼我們先來回顧一下在程式設計語言中有關引數傳遞給方法(或函式)的兩個專業術語: 按值呼叫(call by value)

ethereum(以太坊)(四)--值傳遞引用傳遞

pragma solidity ^0.4.0; // priveta public internal contract Test{ uint public _age; function Test(uint age){ _age = age; }

javascript值傳遞引用傳遞

javascript中,變數型別分為基本型別和物件型別,基本型別有以下幾種:string,number,boolean,null,undefined,物件型別就是object,object又分為object,array,function。基本型別是值傳遞,物件型別是引用傳遞。具體來說,就是基本型

java的引數傳遞是值傳遞還是地址傳遞

java的引數傳遞是值傳遞還是地址傳遞結論: 1、基本型別作為引數傳遞時,是傳遞值的拷貝,無論你怎麼改變這個拷貝,原值是不會改變的 2、物件作為引數傳遞時,是把物件在記憶體中的地址拷貝了一份傳給了引數。 基本型別作為引數傳遞 public class Test1