程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C++ 二級指針

C++ 二級指針

編輯:關於C語言

指針一直是一個很困惑人的東西,對於指針其本身有一個地址是它本質的地址,而它的值是保存的它所指向變量的地址。通過修改指針就能到達修改變量的值。

例如intm=4;int*p;p=&m;指針P的地址裡保存的值就是m的地址。

對於一級指針intm=4;intn=5int*p;p=&m;int*q;q=p;q與p一樣都指向了變量m,修改P和q的值都可以修改變量m的值,但是q無法改變P的指向,使其指向變量n,要達到這個目的必須使用二級指針。

對於二級指針intm=4;intn=5int*p;p=&m;int**q;q=&p;二級指針不僅可以改變所指向變量的值,還可以改變一級指針的指向。二級指針**q*q保存的是指針p的地址,**q保存的是*p的值既是變量m的地址,這樣通過**q可以改變指針*p所指向變量的m的值。例如int*z;z=&n;通過修改*q=z;來改變指針p的指向,使其不再指向m,而是指向n.就是說二級指針與一級指針相比不僅可以改變所指向變量的值,還可以改變一級指針的指向,使其指向其他變量。

例子如下:

例子1:入參為指向指針的指針

#include<iostream>
usingnamespacestd;

intnum=8;
voidChangePoint(int**p2)//入參類型為指向指針的指針。
{
*p2=&num;//*p2是p1的地址,則p1指向了num。
}

intmain()
{
inta=5;
int*p1=&a;
ChangePoint(&p1);//通過函數p1指向了num,而a的值仍為5。
cout<<*p1<<''<<a;
}
輸出:

85

例子2:入參為指針

#include<iostream>
usingnamespacestd;

intnum=8;
voidChangePoint(int*p2)//入參類型為指針,則p2和p1是兩個指針,兩個指針指向的地址相同。
{
inti=0;
int*p3=&i;
*p2=num;//改變指針p2指向內容的值即改變了p1指向內容的值,及a的值也變為8。
p2=p3;//指針變量p2的改變,但不會影響到p1的指向。

}

intmain()
{
inta=5;
int*p1=&a;
ChangePoint(p1);//p1仍指向a,但a的值已經變為8。
cout<<*p1<<''<<a;

}

輸出:

88

#include<iostream>
using namespace std;
#pragma argsused
void ModifyPointValue(int *p,int **q,int *z)
{
int a = 10;
//只是改變了Z的指向,不改變K的值
z= &a;
//改變p的指向的變量i的值
*p = 10;
//二級指針*q為指針q的地址,**q就指向變量j,即可改變所指向的j的值,
//也可以改變q的指向使它不在指向變量j
**q = a;
cout<<"In function value is "<<"P Value is "<<*p<<" q value is"<<**q<<endl;
}
int main(int argc, char* argv[])
{
int i = 4;
int j = 5;
int k = 6;
int *p = NULL;
int *q = NULL;
int *z;
p = &i;
q = &j;
//z指向q與q一起指向了變量j
z = q;
cout<<"z is"<<*z<<"q is"<<*q<<endl;
cout<<"i is "<<i<<" j is"<<j<<" k is"<<k<<endl;
//修改了變量j的值
*z = 8;
//Z改變指向,不在指向j,而是指向k
z = &k;
cout<<"i is "<<i<<" j is"<<j<<" k is"<<k<<endl;
cout<<"z is"<<*z<<"q is"<<*q<<endl;
cout<<"Befor Function P Value is "<<*p<<" q value is"<<*q<<endl;
cout<<"i is "<<i<<" j is"<<j<<" k is"<<k<<endl;
ModifyPointValue(p,&q,z);
cout<<"After Function P Value is "<<*p<<" q value is"<<*q<<endl;
cout<<"i is "<<i<<" j is"<<j<<" k is"<<k<<endl;
char c = getchar();
cout<<"Pree any key exit....."<<endl;
return 0;
}
//---------------------------------------------------------------------------

000349656.jpg

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved