日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 学习 指针

發布時間:2023/12/20 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 学习 指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

指針

文章目錄

      • 指針
        • 指針的定義
        • 指針的初始化
        • 指針的操作
          • 解引用操作:
          • 指針訪問數組元素
        • 指針和const
          • 指向const 對象的指針
          • const指針

指針的定義

指針定義方式有如下兩種:

<type> *p //如 int *P,推薦使用此種定義方式,不易產生誤解 <type>* P //如 int* P ,不推薦此種方式,易產生誤解int* P0,p1;//只有P0是int型指針,p1不是指針

指針的初始化

指針的初始化有四(5)種方式

double dval;double *p = &dval//類型匹配的對象的地址 double *p1 = P //同類型對象的指針 double *p2 = P+3//另一對象之后的地址 double *p3=0 or const int zero =0;double *p3 = zero //字面常量0或者const int 型值為0的常量 double *p4 =NULL //需要包含catdlib頭文件

一種特殊指針Void* 可指向任意類型數據(const 修飾除外)

備注在定義指針時,盡量完成對指針的賦值,如果當前指針所指對象還沒有定義,則將其賦值為0。因為C++不檢測指針的賦值,未賦值的指針會被隨意分配內存,導致程序崩潰。

指針的操作

解引用操作:

"*"的作用是引用指針指向的變量值,引用其實就是引用該變量的地址,“”就是把該地址對應的東西開,出來,就像打開一個包裹一樣,那就是該變量的值了,所以稱為“解引用”。 也就是說,解引用是返回內存地址中保存的值。

string s("hello") string *p =&s count <<*P //輸出“hello”

備注:沒有采用解引用操作時就是對指針的操作,與指針所引用的變量無關

string s1("world") p = &s1 cout << *p //輸出“world” cout << s //輸出“hello” *p =s;cout << s1;//輸出“hello” #include <iostream> using namespace std; int main() {cout << "Hello, world!" << endl;string s("hello");string *p = &s;cout << *p << endl;string s1("world");p = &s1;cout << *p << endl;cout << s <<endl ;*p = s;cout << s1 <<endl;} //運行結果 Hello, world! hello world hello hello
指針訪問數組元素

在表達式中使用數組名字時,該名字會自動轉化為指向數組的第一個元素的指針。

int ia[]={0,2,4,6,8} int *Arr = ia;//*Arr = ia[0] 指針的算術操作 int *Arr2 = Arr+2 //*Arr2 = ia[2] int Varb = *(Arr+2) // Varb = ia[2] ptrdiff_t n = Arr2-Arr // n = 2 ptrdiff_t是一種標準庫類型的數據 指針的下標 int k = Arr2[-2]//k = ia[0],下標不可超出數組首,超出數組末端(最后一個元素的下一個地址)的指針下標,成為哨兵,可參與比較不可解引用 #include <iostream> using namespace std; int main() { int ia[]={0,2,4,6,8}; int *Arr = ia; cout << *Arr <<endl; int *Arr2 = Arr+2; cout << *Arr2 <<endl; int Varb = *(Arr+2); cout << Varb <<endl; ptrdiff_t n = Arr2-Arr; cout << n <<endl; int k = Arr2[-2]; cout << k <<endl; //超出數組末端成為哨兵的指針作用 for (int *pbegin = ia,*pend = ia+5;pbegin != pend;++pbegin)cout << *pbegin << ' '; }運行結果 0 4 4 2 0 0 2 4 6 8

指針和const

Const修飾符可前可后,為防止混亂,一律放在前面修飾比較好

指向const 對象的指針

C++要求指向Const對象的指針也具有const特性,什么叫Const特性?const的特點就是值不可修改,那么具有const 特性的指針就是不能通過其解引用修改值,此即const特性。

具有cont 特性的指針可以指向const 常量也可指向普通變量,但是都不可通過解引用修改值。

const double *cptr; //定義const特性的指針 const double pi = 3.14;//const 常量必須賦初值 *cptr = &pi //cptr指針指向pi常量 double pi2 = 3.14159 *cptr = pi2//錯誤,不可通過解引用改變值cptr = &pi2//可以,指向一個非常量
const指針

const 指針和指向const對象的指針肯定是不同的。const 指針本身的值不可修改。

/指向常量的指針 int errNumb = 0; int *const p = &errNumb;//此處的*const 因該放在 int 后 errNumb = 1; //可直接修改errNumb的值 *P = 2 ; //可修改解引用的值 p = &errNumb +1 //錯誤,不可修改指針本身的值/指向const 常量的 *const,不可做任何修改 const int a =1; int *const pa = a ;一種間接的const 類型指針定義 typedef string *pstring; const pstring cstr;//cstr是一個const 指針 #include <iostream> using namespace std; int main() { int k = 1 ; int *const p = &k ; k = 2 ; cout << *p <<endl; *p = 3 ; cout << k <<endl; }運行結果 2 3

#include
using namespace std;
int main()
{
int k = 1 ;
int *const p = &k ;
k = 2 ;
cout << *p <<endl;
*p = 3 ;
cout << k <<endl;
}

運行結果
2
3

總結

以上是生活随笔為你收集整理的C++ 学习 指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。