C 按值傳遞的還有位址

2021-07-03 01:23:27 字數 858 閱讀 4778

在寫vector的時候,我對「位址在傳入到函式中時它也是乙個變數」這個觀點更加的清晰了,在寫vector的建構函式的時候需要呼叫乙個函式,該函式具有的功能是分配記憶體空間並將這些空間填充上應有的值。

這個函式如下:

template

typename

vector

::iterator vector

::allocate_and_fill(size_type n, const value_type& val)

源**是這樣寫的,大致的意思就是在以result為起點,對這個迭代器指向的元素進行val的賦值,並對該點及以後的點都是這樣進行操作。

但是我之前由於對「位址在傳入到函式中時它也是乙個變數」理解不深,我認為在將result傳入uninitialized_fill_n中後,result也是一步步地向前走,然後當迴圈n次後退出。

但是我在除錯的時候,發現走到最後一步return result;的時候,result顯示的位址是乙個很大的負數,很明顯result所指向的這個地方並沒有被初始化。但是明明在uninitialized_fill_n(result, n, val);中已經進行初始話了啊?

這個時候我才反應過來:我們在uninitialized_fill_n(result, n, val);中傳進去的是result的副本,result並沒有進行變化,在uninitialized_fill_n(result, n, val);中每次迴圈確實都是將位址進行了++操作,但是那是位址的變化,result這個變數並沒有變化,還是表示的是申請新記憶體所返回的指標。

c 值傳遞 位址傳遞 引用傳遞

一.函式引數傳遞方式之一 值傳遞 1 值傳遞的乙個錯誤認識 先看題一中exchg1函式的定義 void exchg1 int x,int y 定義中的x,y變數被稱為exchg1函式的形式引數 問 你認為這個函式是在做什麼呀?答 好像是對引數x,y的值對調吧?請往下看,我想利用這個函式來完成對a,b...

C 值傳遞 位址傳遞 引用傳遞

昨天遇到乙個問題 程式一 char str 256 char sp str visitdepart rs,rs.column,sp static void visitdepart result t rs,int num,char spx note 這個程式表面上看是沒有錯誤的,但是,我用它做了樹的深...

C語言 值傳遞 位址傳遞

1.值傳遞 void exchg1 int x,int y main 呼叫exchg1 a,b 有乙個隱含的操作就是int x a int y b 然後函式內部把形參x和y的值對換。所以a和b的值各自不變。2.位址傳遞 void exchg2 int px,int py main 同樣的,呼叫exc...