程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 深刻const int *p與int * const p的差別詳解(常量指針與指向常量的指針)

深刻const int *p與int * const p的差別詳解(常量指針與指向常量的指針)

編輯:關於C++

深刻const int *p與int * const p的差別詳解(常量指針與指向常量的指針)。本站提示廣大學習愛好者:(深刻const int *p與int * const p的差別詳解(常量指針與指向常量的指針))文章只能為提供參考,不一定能成為您想要的結果。以下是深刻const int *p與int * const p的差別詳解(常量指針與指向常量的指針)正文


關於指針和常量,有以下三種情勢都是准確的:

const char * myPtr = &char_A;//指向常量的指針
char * const myPtr = &char_A;//常量的指針
const char * const myPtr = &char_A;//指向常量的常量指針

上面順次對這三品種型停止引見。
由於*操作符是左操作符,左操作符的優先級是從右到左,關於
1.常量指針(Constant Pointers)

int * const p

先看const再看* ,是p是一個常量類型的指針,不克不及修正這個指針的指向,然則這個指針所指向的地址上存儲的值可以修正。
實例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不克不及再如許從新賦值了,即不克不及再指向另外一個新地址。所以我曾經正文了它。
    printf("%d\n", *pi ) ;   //輸入是30
    i1=80;     //5.想一想看:這裡能用*pi=80;來取代嗎?可以,這裡可以經由過程*pi修正i1的值。
    printf("%d\n", *pi ) ;   //輸入是80
    system("pause");
}

實例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,界說一個指針指向一個常量,不克不及經由過程指針來修正這個指針指向的值。
實例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可以在隨意率性時刻從新賦值一個新內存地址
    i2=80;     //想一想看:這裡能用*pi=80;來取代嗎?固然不克不及
    printf("%d\n", *pi ) ;   //輸入是80
    system("pause");
}

實例4

char char_A = 'A';
const char * myPtr = &char_A;
*myPtr = 'J';    // error - can't change value of *myPtr

所以指針p所指向的整型數是一個常量,其值不克不及被修正。
3.指向常量的常量指針
關於“指向常量的常量指針”,就必需同時知足上述1和2中的內容,既弗成以修正指針的值,也弗成以修正指針指向的值。
4.引入字符數組和字符指針
字符數組和字符指針的界說以下:

char a[] = "I Love You!"; //界說了一個字符數組
char *p = "I Love You!";  //界說了一個字符指針

可以將a懂得為常量指針,而p為指向常量的指針,代碼實例以下:

#include<iostream>
#include<stdlib.h>
using namespace std;
void main()
{
    char a[] = "I Love You!"; //界說了一個字符數組,數組名a是一個常量指針,指向的地位不變,都是數組第一個元素的地位
    char *p = "I Love You!";  //界說了一個字符指針,指針p指向一個字符串常量,這個字符串常量不克不及修正
    //*(p+1)='a';//毛病,弗成以修正指針指向的值,所以這裡正文失落。
    a[1]='a';//常量指針,不克不及修正指針的值,然則可以修正指針所指向的值。
    //a=p;//毛病,a是常量指針,弗成修正其值。
    cout<<a<<endl;
    cout<<p<<endl;
    cout<<a[1]<<endl;
    cout<<*(p+2)<<endl;
    system("pause");
}

輸入值為:
IaLove You!
I Love You!
a
L
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved