學(xué)習(xí)vector模板類時發(fā)現(xiàn)其作為形參有多種不同的形式勿负,比如如下兩種形式:
void function(vector<dtype> &vec);
void function(vector<dtype> vec);
兩種形式的區(qū)別用兩個例子給出馏艾,main函數(shù)部分如下:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <ctime>
using namespace std;
int main()
{
vector<int> p;
int a;
a=0;
for(int i=0;i < 10;i++)
p.push_back(a);
prtvector(p, 10);
for(int i=0; i<30 ;i++)
cout<< p[i] <<endl;
return 0;
}
考察void function(vector<dtype> &vec)的形式,即使用引用傳遞奴愉。定義一個函數(shù)如下:
void prtvector(vector<int> &p, int N)
{
for(int i=0;i < 20;i++)
p.push_back(i);
}
輸出結(jié)果為
0
0
0
0
0
0
0
0
0
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
這種情況下琅摩,隨著函數(shù)內(nèi)形參的變化,實參會隨著改變锭硼。使用指針傳遞也會有同樣的效果房资,總之,實參會隨著形參變化而變化檀头。
考察void function(vector<dtype> vec)轰异,直接進行值傳遞岖沛,函數(shù)變?yōu)?/p>
void prtvector(vector<int> p, int N)
{
for(int i=0;i < 20;i++)
p.push_back(i);
}
輸出結(jié)果為
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
134977
0
0
0
0
0
0
0
0
0
0
輸出了一堆不值知道的未知值,這說明直接采用值傳遞的方式搭独,不能帶給實參值任何變化烫止。