/*
?? ?指針變量作為函數(shù)參數(shù)
?? ??? ?函數(shù)的參數(shù)可以是指針類型,它的作用是將一個變量的地址傳送到另一個函數(shù)中。
?? ??? ?指針變量作為函數(shù)參數(shù)與變量本身作為函數(shù)參數(shù)不同,變量作函數(shù)參數(shù)傳遞的是具體值。
?? ??? ?而指針作為函數(shù)參數(shù)傳遞的是內(nèi)存的地址
*/
#include<iostream> ?//C++ 標準輸入輸出流頭文件
using namespace std;
void swapfunc(int *p1,int *p2) ?//將地址里面的值進行交換
{
? ? int?? ?temp = 0;
?? ?temp = *p1;
?? ?*p1 = *p2; ?? ?
?? ?*p2 = temp;
}
int main()
{
?? ?int a,b;
?? ?int *pa,*pb;
?? ?cout << "請輸入 a b 的值:"<<endl;
?? ?cin ?>> a >> b ;
?? ?
?? ?
?? ?pa = &a;
?? ?pb = &b;
?? ?
?? ?if (a<b)
?? ??? ?swapfunc(p1,p2)
?? ?cout << "a=" << a ? << ",b=" << b << endl;
?? ?cout << *pa ?<< "," << *pb ? ?<<endl;
?? ?
?? ?return 0;
}
指向數(shù)組元素的指針的定義與賦值
int a[10], *p;
p =? &a[0];? //數(shù)組第一個元素的地址
p = a; //直接用數(shù)組名賦值? ?p是變量 ,a 是常量
若數(shù)組元素為int型,則指向其的指針變量也對應為int型
如: int a[10];
則:int *p = a; ????????int? *p = &a[0];? ?//這是兩種情況,且均為賦初值
通過指針引用數(shù)組元素
int a[10];
int *p =a;? //為指針變量賦初值
* p = 1;? a[0] = 1 ; //通過指針變量為數(shù)組元素賦值
C++規(guī)定,p+1指向數(shù)組的下一個元素,而不是下一個字節(jié)。
如: *(p+1) = 2;? ????????a[1] = 2;
?*++p = 2; ????????p=p+1; //指針變量也重新賦值?????????*p=2;
#include<iostream> //C++ 標準輸入輸出流頭文件
using namespace std;
int main()
{
int a[5] = {12,30,66,55,22}
int *p = a; //將數(shù)組的第一個元素首地址賦給指針變量p p = &a[0] 12
cout << "a[0] = " << *p << endl;
*p = 33;
cout << "a[0]" << *p << endl;
cout << "結果為:" << *(p+1) << endl; // 30
return 0;
}
取地址與取值的區(qū)別?
#include <iostream>
using namespace std;
int main()
{
int max = 66;
int &remax = max;
cout << "max的地址是:" << &max << endl;
cout << "remax的地址是:" << &remax <<endl;
cout <<"\n\n max的值= " << max << endl;
cout <<"remax的值= " << remax <<endl;
return 0;
}
對引用類型的變量,說明以下幾點:
1.引用在定義的時候要初始化。
int? &remax ; // 錯誤,沒有具體的引用對象
int &remax = max ; //max是已經(jīng)定義過的變量
2.對引用的操作就是對被引用的變量的操作。
3.引用類型變量的初始化不能是一個常數(shù)。
如:int &refl = 5 ;//是錯誤的
int &refl =i;
4.引用同變量一樣有地址,可以對其地址進行操作,即將其地址賦給一指針
int a,*p;
int &m = a;? ?//&是變量的引用
p = &m;
*p = 10;? ?//&是變量的地址
5.可以用動態(tài)分配的內(nèi)存空間來初始化一個引用變量
?float &reff? =? * new? float ;? ?//用new開辟一個空間,取一個別名reff
?reff = 200;? ? ? ? ? ? ? ? ? ? ? ? ? ? //給空間賦值? ??
?cout << reff<<endl;;? ? ? ? ? ? ?//輸出200
?delete &reff;? ? ? ? ? ? ? ? ? ? ? ? //收回這個空間
6.指針與引用的區(qū)別:
(1)指針是通過地址間接訪問某個變量,而引用是通過別名直接訪問某個變量。
(2)引用必須通過初始化,而一旦被初始化后不得作為其它變量的別名。
ps:當 &a 的前面有類型符時(如int &a),它必然是對引用的聲明;如果前面無類型符(如cout<<&a),則是取變量的地址。
以下的聲明是非法的:
(1).企圖建立數(shù)組的引用? ? ? ? ? ? ? ? int &a[9];
(2).企圖建立指向引用的指針? ? ? ? int &* p;
(3).企圖建立引用的引用? ? ? ? ? ? ? ? int &&px;
7.對常量(用const聲明)的引用
void main()
{
? ? ? ? const int &r = 8;? //說明r為常量,不可賦值
? ? ? ? cout <<"r= "<<r<<endl;?
? ? ? ? //r+=15 ;? //r為常量,不可作為賦值運算
? ? ? ? cout<<"r= "<<r<<endl;?
}
8.引用與函數(shù)
引用的用途主要是用來作函數(shù)的參數(shù)或函數(shù)的返回值
引用作函數(shù)的形參,實際上是在被調(diào)函數(shù)中對實參變量進行操作
void change(int &x,int &y) // x,y是實參a,b的別名 { int t; t=x; x=y; y=z; } void main(void) { int a = 3, b = 5; change(a,b); //實參為變量 cout<< a << '\t' << b << endl; }
9.函數(shù)的返回值為引用類型
? ? ? ? 可以把函數(shù)定義為引用類型,這時函數(shù)的返回值即為某一變量的引用(別名),因此,它相當于返回了一個變量,所以可對其返回值進行賦值操作。這一點類同于函數(shù)的返回值為指針類型。
#include<iostream> using namespace std; int a = 4; int &f(int x) //函數(shù)返回a的引用,即a的別名 { a = a + x; return a; } int main(int agrc,char *argv[]) { int t = 5; cout <<f(t)<<endl; f(t) = 20; cout <<f(t)<<endl; t = f(t); cout <<f(t)<<endl; return 0; }
10.const類型常量
? ? ? ? 當用const限制說明標識符時,表示所說明的數(shù)據(jù)類型為常量類型??煞譃閏onst型常量和const型指針。
可用const限制定義標識符量,如:
const ????????int? ? ? ? MaxLine = 666;
const? ? ? ? ?float? ? ? Pi = 3.1415926;
用const定義的標識符常量時,一定要對其初始化。在說明進行初始化是對這種常量置值的唯一辦法,不能用賦值運算符對這種常量進行賦值。如:文章來源:http://www.zghlxwxcb.cn/news/detail-728400.html
????????????????MaxLine = 35;文章來源地址http://www.zghlxwxcb.cn/news/detail-728400.html
#include<iostream> using namespace std; int main(int argc,char *argv[]) { int a = 3,b = 5 ; const int *pa = &b; //可以不賦初值 pa = &a; //指針變量可以重新賦值 cout << *pa <<endl; //輸出3 // *pa = 10; //非法,指針指向的內(nèi)容不能賦值 a = 100 ; //變量可以重新賦值 cout << *pa <<endl; //輸出100 return 0; } //即不可以通過指針對變量重新賦值
到了這里,關于C++【4】指針與引用;數(shù)組指針;指針數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!