1. 程式人生 > >常量指標與指向常量的指標

常量指標與指向常量的指標

對於指標和常量,有以下三種形式都是正確的:

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

相關推薦

指標常量常量指標指向常量指標常量小結(C/C++)

一 指標常量: int a; int *const pcb = &a; //const放在指標宣告操作符的右側 只要const位於指標宣告操作符右側,就表明宣告的物件是一個常量,且它的內容是一個指標,也就是一個地址。上面的宣告可以這麼讀,聲明瞭一個常量pcb,它

常量指標指向常量指標

對於指標和常量,有以下三種形式都是正確的: const char * myPtr = &char_A;//指向常量的指標 char * const myPtr = &char_A;//常量的指標 const char * const myPtr = &char_A;//指向常量的常

小辨常量指標指向常量指標

有時候學習C++跟學習繞口令一樣,概念的名稱非常接近,下面看一則繞口令: 基礎概念:直接看程式碼 int n=10; int *c; int *const a=&n;//整型常量指標,同時就有

C語言中指向字串常量指標指向字串陣列的指標

char str[] = "1234567asdf";char*pstr = str;上面是定義了一個字串陣列及一個指向這個字串陣列的指標,可以通過這個指標對陣列中的內容進行操作;例如:*(pstr +

char陣列 、char指標字串常量的比較

陣列不是基本型別,不能直接參與比較,陣列與字串及字元指標與字串比較其實比較的是二者的地址。 例: int isequiv(char *t) { if (t == "char") return 1; else return 0; } int main() { char te

Const指標Const常量的在C編譯器之間的匹配

這幾天讀了JULY的部落格,感覺CSDN是一個開發的平臺,有什麼技術上的知識,有可以共享! 我也來寫一下,在使用C/C++中遇到的一些小的,易忽略的問題。 1.非const型別的變數轉化為const型別的變數(自動轉化的) //以下編譯環境是linux+gcc #inclu

常量指標 const void * 指標常量 void* const 指向常量指標常量 const void* const

一) 常量指標。 常量是形容詞,指標是名詞,以指標為中心的一個偏正結構短語。這樣看,常量指標本質是指標,常量修飾它,表示這個指標乃是一個指向常量的指標(變數)。 指標指向的物件是常量,那麼這個物件不能被更改。 在C/C++中,常量指標是這樣宣告的:

指標常量常量指標指向常量指標

        很多與檔案操作相關的函式其引數型別都是const char*(指向常量的指標)型別,下面就簡單介紹一下常量指標(指向常量的指標)(const char*)與指標常量(char *const)這兩種型別的區別。         1. const char*  

常量指標指向常量指標指向常量的常指標的區別

常量指標:本身不可以修改,指向的目標可以被修改。 int *const p=&a;//p只能儲存a的地址,但是a的值可以改變。如果定義指向物件的指標,不能改變使其指向其他的物件。指向常量的指標

指向結構體變數的指標指向結構體陣列的指標使用時的區別

指向結構體變數的指標與指向結構體陣列的指標在使用時的區別就是:指向結構體變數的指標,在使用時這樣寫:struct rsol v;struct rsol *m;m = &v;指向結構體陣列的指標,在使用時這樣寫:struct edc hj[5]={1,2,3,4,5};

const指標 指向const的指標的區別

當使用帶有const的指標時其實有兩種意思。一種指的是你不能修改指標本身的內容,另一種指的是你不能修改指標指向的內容。聽起來有點混淆一會放個例子上來就明白了。       先說指向const的指標,它的意思是指標指向的內容是不能被修改的。它有兩種寫法。       con

簡單理解—指標陣列 陣列指標 函式指標 函式指標陣列 指向函式指標陣列的指標

簡單理解—指標陣列 陣列指標 函式指標 函式指標陣列 指向函式指標陣列的指標 指標陣列 指標陣列,顧名思義是”指標的陣列”,首先這個變數是一個陣列,其次,”指標”修飾這個陣列,意思是說這個陣列的所有元素都是指標型別,在32位系統中,指標佔四個位元組。

指標字串、指標函式

標題1、 指標與字串的千絲萬縷 由於在C語言中,是通過字元陣列來儲存字串的,因而前面通過指標對一維陣列和二維陣列的操作方法,同樣適用於字串。其實,對字串的操作最好採用字串操作函式。 #include<stdio.h> int main() { char name[12]

指標陣列,指標函式之間的關係

指標陣列和陣列指標 指標陣列,它的關鍵在於是一個數組,即陣列中每個元素都是指標。 陣列指標,他的關鍵在於是指標變數,即這個指標指向一個數組。 #include<stdio.h> int main () { int arr [4] = {

理解 指標陣列 陣列指標 函式指標 函式指標陣列 指向函式指標陣列的指標

一、指標陣列與陣列指標先看兩行程式碼,猜猜哪個是陣列,哪個是指標int *p[5];int (*p)[5];有沒有很簡單,但是有很多初學者很是分不清楚;第一個是指標陣列,第二個是陣列指標。且看小僧給大家捋一捋,首先要明白符號優先順序問題,“[ ]”的優先順序高於“*”,所

指標陣列 字元指標,字串和字元陣列的區別

指標和陣列是不相等的,把一個數組名作為一個引數傳遞給函式時陣列名就是指向第一個元素的指標, 在大多數表示式中陣列名的值是指向第一個元素的指標(有兩個例外,一個是sizeof返回的是整個陣列 的位元組數

函式指標、函式返回指標、const指標指向const指標指向const的const指標

①函式指標 函式指標是指向函式的指標變數。 因而“函式指標”本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。如前所述,C在編譯時,每一個函式都有一個入口地址,該入口地址就是函式指標所指向的地址。有了指向函式的

陣列字串、字元指標其他型別指標、賦值引數、指標引數以及引用引數、函式指標

◆陣列和字串 從表面上看,一個字串就是一個字元陣列,但在C++語句中,兩者並不完全相同。 字串是一個以串尾符"\0"結尾的字元型陣列,但任一個字元型陣列不見得必為字串(因為其中可以不包含"\0"結尾字元)。 char string1[7]="China";char string2[]="China";ch

深入理解C語言中的指標陣列之指標

前言          其實很早就想要寫一篇關於指標和陣列的文章,畢竟可以認為這是C語言的根本所在。相信,任意一家公司如果想要考察一個人對C語言的理解,指標和陣列絕對是必考的一部分。          但是之前一方面之前一直在忙各種事情,一直沒有時間靜下心來寫這些東西,畢竟

指向常量指標常量指標

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/sinat_26448309/article/details/75226971 在c\c++中用關鍵字const來定義一個只讀的變數和物件,它有如下的優點: 1.fun(const i