物件作為引數的值傳遞與地址傳遞
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);
}
結果:
1
2
補充:什麼叫值傳遞?
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