C語言按值傳遞 按址傳遞

2021-08-02 16:35:03 字數 735 閱讀 1660

按值傳遞:是把實參的值賦值給行參,相當於copy。那麼對行參的修改,不會影響實參的值 。

按址傳遞: 是傳值的一種特殊方式,只是他傳遞的是位址,不是普通的賦值,那麼傳位址以後,實參和行參都                     指向同乙個物件,因此對形參的修改會影響到實參。

#include

#include

void malloc_memory (char *ptr , int size)

int main(int argc ,char **argv)

執行結果: segmentation fault (core dumped)

//段錯誤

解決辦法如下:

修改程式(2種方法):

1,利用指標函式返回乙個位址

宣告函式: void *malloc_memory2(int size)

在main函式裡,

char *ptr2 = null;

prt2 = malloc_memory2(10);

//操作位址來控制ptr2

....

2,若堅持利用引數

宣告函式 void malloc_memory(char **ptr , int size);

在main函式裡 

char *ptr3 = null;

malloc_memory3(&ptr3 , 10);

//按址傳遞。把ptr3的位址傳過去,直接對ptr3記憶體進行賦值。

深拷貝和淺拷貝,按值傳遞,按址傳遞

一 深拷貝和淺拷貝 js中的兩種變數型別,即值型別 數值 布林值 null undefined 和引用型別 物件 陣列 函式 深拷貝和淺拷貝只針對引用型別。感覺上淺拷貝就是引用,深拷貝是新建。宗旨就是新生成的物件不改變源資料,不管怎樣實現,都可以理解為深拷貝。深拷貝方式一 變成按值傳遞 深拷貝方式二...

C和C 中的按值傳遞,按址傳遞的區別及其使用方法

include using namespace std 體會下列 即可,僅是個人理解,有誤之處還請各位前輩多多指教 void change1 int a void change1 int a void change2 int p1 void change2 int p1 此時 p1 當成指標,此時對...

C 值傳遞和按引用傳遞

知識點 值型別和引用型別 為值型別,據 對於引用型別來說,棧中儲存的是堆中物件的位址 值傳遞和引用傳遞 對於值傳遞,傳遞的是棧中儲存的資料 對於引用傳遞。傳遞的是棧本身的位址 先看一下值傳遞 傳遞值型別和引用型別 class program 值型別的值傳遞 static void d1 int m ...