深入const int *p與int * const p的區(qū)別詳解(常量指針與指向常量的指針)
對于指針和常量,有以下三種形式都是正確的:
const char * myPtr = &char_A;//指向常量的指針
char * const myPtr = &char_A;//常量的指針
const char * const myPtr = &char_A;//指向常量的常量指針
下面依次對這三種類型進(jìn)行介紹。
因?yàn)?操作符是左操作符,左操作符的優(yōu)先級是從右到左,對于
1.常量指針(Constant Pointers)
int * const p
先看const再看* ,是p是一個(gè)常量類型的指針,不能修改這個(gè)指針的指向,但是這個(gè)指針?biāo)赶虻牡刂飞洗鎯Φ闹悼梢孕薷摹?BR>實(shí)例1:
#include<iostream>
#include<stdlib.h>
using namespace std;
void main()
{
int i1=30;
int i2=40;
int * const pi=&i1;//這里的pi指針式常量。
//pi=&i2; //注意這里,pi不能再這樣重新賦值了,即不能再指向另一個(gè)新地址。所以我已經(jīng)注釋了它。
printf("%d\n", *pi ) ; //輸出是30
i1=80; //5.想想看:這里能用*pi=80;來代替嗎?可以,這里可以通過*pi修改i1的值。
printf("%d\n", *pi ) ; //輸出是80
system("pause");
}
實(shí)例2:
char char_A = 'A';
char char_B = 'B';
char * const myPtr = &char_A;
myPtr = &char_B; // error - can't change address of myPtr
2.指向常量的指針(Pointers to Constants)
const int *p
先看*再看const,定義一個(gè)指針指向一個(gè)常量,不能通過指針來修改這個(gè)指針指向的值。
實(shí)例3:
#include<iostream>
#include<stdlib.h>
using namespace std;
void main()
{
int i1=30;
int i2=40;
const int * pi=&i1;
printf("%d\n", *pi ) ; //輸出是30
pi=&i2; //注意這里,pi可以在任意時(shí)候重新賦值一個(gè)新內(nèi)存地址
i2=80; //想想看:這里能用*pi=80;來代替嗎?當(dāng)然不能
printf("%d\n", *pi ) ; //輸出是80
system("pause");
}
實(shí)例4
char char_A = 'A';
const char * myPtr = &char_A;
*myPtr = 'J'; // error - can't change value of *myPtr
所以指針p所指向的整型數(shù)是一個(gè)常量,其值不能被修改。
3.指向常量的常量指針
對于“指向常量的常量指針”,就必須同時(shí)滿足上述1和2中的內(nèi)容,既不可以修改指針的值,也不可以修改指針指向的值。
4.引入字符數(shù)組和字符指針
字符數(shù)組和字符指針的定義如下:
char a[] = "I Love You!"; //定義了一個(gè)字符數(shù)組
char *p = "I Love You!"; //定義了一個(gè)字符指針
可以將a理解為常量指針,而p為指向常量的指針,代碼實(shí)例如下:
#include<iostream>
#include<stdlib.h>
using namespace std;
void main()
{
char a[] = "I Love You!"; //定義了一個(gè)字符數(shù)組,數(shù)組名a是一個(gè)常量指針,指向的位置不變,都是數(shù)組第一個(gè)元素的位置
char *p = "I Love You!"; //定義了一個(gè)字符指針,指針p指向一個(gè)字符串常量,這個(gè)字符串常量不能修改
//*(p+1)='a';//錯(cuò)誤,不可以修改指針指向的值,所以這里注釋掉。
a[1]='a';//常量指針,不能修改指針的值,但是可以修改指針?biāo)赶虻闹怠?BR> //a=p;//錯(cuò)誤,a是常量指針,不可修改其值。
cout<<a<<endl;
cout<<p<<endl;
cout<<a[1]<<endl;
cout<<*(p+2)<<endl;
system("pause");
}
輸出值為:
IaLove You!
I Love You!
a
L
欄 目:C語言
下一篇:C語言中字符串常用函數(shù)strcat與strcpy的用法介紹
本文標(biāo)題:深入const int *p與int * const p的區(qū)別詳解(常量指針與指向常量的指針)
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4328.html
您可能感興趣的文章
- 01-10深入理解約瑟夫環(huán)的數(shù)學(xué)優(yōu)化方法
- 01-10深入二叉樹兩個(gè)結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)的詳解
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解
- 01-10深入第K大數(shù)問題以及算法概要的詳解
- 01-10深入解析最長公共子串
- 01-10深入理解鏈表的各類操作詳解
- 01-10深入N皇后問題的兩個(gè)最高效算法的詳解
- 01-10深入理解二叉樹的非遞歸遍歷
- 01-10深入全排列算法及其實(shí)現(xiàn)方法


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery