指針是用來專門存放地址的數據類型 1、定義一個指針時,必須規定它指向的變量類型,如int* p 【注意:如果寫成int * ipa,ipb,ipc,其實只有ipa是指針類型,ipb、ipc還是int類型】 2、最好能初始化,即int a=47;int* p=&a;,C++編程的一般原則是定義時初始化
指針傳遞 通常,向函數傳遞參數時,在函數內部生成該參數的拷貝,稱為“按值傳遞”。 如果我們傳遞一個指針給函數,實際上就是傳遞外部對象的別名,使函數能修改外部對象。(外部對象:如以下程序中,對于f(),main中的x就是外部對象)
#include <iostream>using namespace std;void f(int* p){ cout<<"p= " <<p <<std::endl; cout<<"*p= "<<*p<<std::endl; *p=5; cout<<"*p= "<<p<<std::endl;}int main(){ int x=47; cout<<"x= "<<x<<std::endl; cout<<"&x= "<<&x<<std::endl; //傳入指針 f(&x); cout<<"x= "<<x<<std::endl; return 0;}int *p=&x; 定義指針 *p:取指針p指向的變量的值 &x:取變量x的地址
引用傳遞 引用傳遞參數,不用int*傳遞指針,而是用int&傳遞實參的引用,帶引用的參數調用比帶指針的函數調用在語法上更加清晰。
#include <iostream>using namespace std;void f(int& r){ //用int&r作為引用參數,直接傳遞調用者參數的地址 cout<<"&r= "<<r<<endl;}int main(){ int x=47; f(x); return 0;}理解: 1、指針是指向一個變量的,保存的是該變量的地址,相當于該變量的一個別名,指針傳遞參數相當于保存了該變量的地址,傳遞給調用函數,咋調用函數中通過指針拿到該變量值 2、引用傳遞,實際上就是傳遞實參,而被調用函數的形參是該實參的引用。
void*:意味著任何類型的地址都可以間接引用那個地址。 int*:只能針對int類型變量的地址可以間接引用那個地址。 一旦間接引用void*,就會丟失關于類型的信息,使用前必須轉換。
int i=99;void* vp=&i;*((int*) vp)=3;新聞熱點
疑難解答