當前位置:首頁 » 編程語言 » 值傳遞與地址傳遞c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

值傳遞與地址傳遞c語言

發布時間: 2022-04-22 01:45:27

c語言中,實參向形參傳遞時,什麼時候用單向值傳遞,什麼時候用地址傳遞

C語言在形參和實參之間傳遞的不僅是值傳遞,也包括地址傳遞的。

細節如下:
C語言函數參數傳遞包括按值傳遞和按地址傳遞兩種;
當形式參數是數組、指針時都是使用的按地址傳遞。

② 誰解釋C語言中什麼是值傳遞和地址傳遞

本質上都是值傳遞,因為傳遞的都是數值,地址也是用數值表示的。如果從作用上分類,值傳遞傳送的是內存單元中存放的數據,這個數據是接收方要直接使用的,地址傳遞傳送的是內存單元的地址(其實這個地址也是存放在某個內存單元中的),這個數據是給接收方間接使用的,因為它指向另一個內存單元,而這個被指向單元里的數據才是最終需要的。比方一下你就明白了:有兩個抽屜AB,A和B中都有你要的東西,但抽屜在我這里,我把A裡面的東西直接給你就是值傳遞,我把B的鑰匙給你就是地址傳遞。

③ C語言的值傳遞和地址傳遞

void func(int *a,int b[]) 和void func(int a,int b[]) 的區別是:
前者a傳遞的是指針,後者a是值傳遞;但b都是地址傳遞,因為在參數列表中int b[]相當與int *b

問題是你修改的是b[0]的值,所以a是值傳遞和地址傳遞是沒有影響的。

如果想輸出b[0]=3,
void func(int a,int b)
{
a=b+6;
}
main()
{int a,b[5];
a=0;b[0]=3;
func(a,b[0]);
printf("%d\n",b[0]);
}

④ C語言中的值傳遞和地址傳遞

都是值傳遞,真正的引用傳遞是出現在C#中,當你傳指針的時候,實際上你傳的是指針所指向的地址值,也就是把地址值傳過去,但是這個地址值也是通過值傳遞過去的,即函數內的指針指向的地址值是原來的地址值的一個拷貝,但是由於地址值相同,所以你在函數內對該指針進行解指針並進行修改,你也修改了外部的那個指針的值(注意,修改的不是地址值)
*p
=
30;
那麼主函數內的值也變成了30,因為是對同一個地址存放的數據進行了操作

⑤ c語言中常出現 "值傳遞" "地址傳遞" "數組傳遞" 等概念 它們是什麼意思 有什麼異同點

1一般函數的形參和實參之間是值傳遞,傳遞的是數值,但不改變實參;2有指針參與的是 地址傳遞,就是賦予地址值,可以改變實參;3數組傳遞用於指針數組,和2的理解差不多;

⑥ C語言 值傳遞和地址傳遞

#include<stdio.h>
#include<stdlib.h>

main()
{doublea[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;//這里s指向a
fun(a,b,s);
printf("%5.2f ",*s);
}

voidfun(double*p1,double*p2,double*s)
{s=(double*)calloc(1,sizeof(double));//這里s重新指向一個新地址
*s=*p1+*(p2+1);//在新地址中賦值,與main中的a沒有任何關系
}

⑦ C語言值傳遞和地址傳遞 不明白

1)void swap(int a, int b)的參數屬於值傳遞;

2)值傳遞需要一個中間變數,以你的程序為例:

swap(x,y);

它的實際過程是,先分配兩個臨時變數,a和b,這兩個變數和傳入的x、y佔用不同的地址空間,程序先將x和y的值復制給a和b:

swap(a = x, b = y),之後在swap中所有的操作都是針對a和b進行的,與x和y無關,所以x和y的值在swap執行後依然保持不變。

3)地址傳遞也需要一個中間變數,但是這個中間變數保存的是地址,對於C語言你就需要用到指針變數,它可以保存一個普通變數的地址,通過改變這個地址里的內容就可以改變原變數的值。對於你的程序,如果想在調用swap後,x和y的值被改變,你需要定義成下面的樣子:

#include <stdio.h>
void swap(int *,int *);//參數里的*號表示指針
void main()
{
int x=10,y=20;
printf("(1)a=%d y=%d ",x,y);
swap(&x,&y);//x和y按地址傳入
printf("(4)x=%d y=%d ",x,y);//按地址傳入,x和y的值被swap改變
}

void swap(int *pa, int *pb)//函數形參變成指針

{
int t;
printf("(2)a=%d b=%d ",*pa,*pb); //訪問指針的內容需要在指針前加*號
t=*pa;
*pa=*pb;
*pb=t;
printf("(3)a=%d b=%d ",*pa,*pb);
}

}

3)關於指針的詳細內容,由於篇幅有限,請參看C語言資料的相關章節。

⑧ C語言:哪些是值傳遞哪些是地址傳遞

C語言沒有真正意義的地址傳遞,即使傳遞指針也只是傳遞的指針的值,
比如這里加入b 的地址是0x ffff;
實際上在point 函數內是產生了另一個名為p的指針, p 指向0x ffff ( 這個p 只是和main函數的p值相同而已,不是同一個。所以傳遞指針其實是傳遞的地址的值,還是值傳遞)
因此p + 3 不會影響main 函數的p, 如果要改變main的p, 必須:
Point(char** p)
{
*p += 3;

}
調用:
*p = b;
Point(&p);
總之,改變指針的值用二級指針(更高一級的指針,即該指針的地址)。

⑨ C語言的值傳遞和地址傳遞有啥區別

兩者其實傳遞的都是一個內存單元的內容。不同的是,值傳遞傳遞的內容是一個變數的值,得到這個值後,對這個值得修改不能改變原變數的值;而地址傳遞傳遞的是一個變數的地址,得到傳遞的地址值後,可以通過這個地址直接訪問地址對應的那個變數,進而修改那個變數的值。

⑩ c語言程序設計中哪些是按值傳遞,哪些是按地址傳遞

其實C語言中函數參數的傳遞 全 是 值傳遞
所謂的 地址 傳遞,只不過是程序員那麼稱呼他們而已
比如函數: int func(int input);
如果我把 input當做普通值使用( 例如:printf("%d\n",input); )它就是一整形
如果我把 input當做一指針使用( 例如: *((int*)input) = 5; )它就是一指針,
但是你自己要明白:
1.調用函數傳的是什麼值,用於什麼作用,
2.被調用函數中如何使用這個參數