1. 程式人生 > >C++ const與指標的結合

C++ const與指標的結合

區別方法:

如果const位於*的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;

如果const位於*的右側,const就是修飾指標本身,即指標本身是常量。

換句話說,如果const靠近資料型別,就是修飾該型別的變數為常量 :

const int x=20;//定義int型別的符號常量x,x=10

const int *p=&x;//定義指向常量的指標p,可以改變指標的指向,但是不能通過指標來改變 x中的值

如果:const靠近指標,就是定義這個指標為常指標

例:

int * const p2=&x;//定義常指標p2,不可改變指標的指向(常指標),但可以通過指標來修改x中的值

如果,有兩個const一起修飾:

例: const int * const p3=&x;//不可以修改指標的指向,也不能修改通過指標修改變數的值

#include <iostream>
using namespace std;

int main()
{
	int x=10;
	int y=50;
	//左側修飾變數不可變
	//指向常量的指標 
	const int *p=&x;
	cout<<"p="<<p<<" *p="<<*p<<endl;
//	*p=20;//改變指標指向的變數,出錯:error C2166: l-value specifies const object
	p=&y;//指標裡面的值是可以變的。
	cout<<"p="<<p<<" *p="<<*p<<endl;
	//常指標
	int * const p2=&x;//const靠近指標p2修飾指標p2裡面的地址值不可變,
	cout<<"p2="<<p2<<" *p2="<<*p2<<endl;
//	p2=&y;//不能修改,常指標的指向 error C2166: l-value specifies const object
	*p2=30;//可以修改常指標指向的變數的值
	cout<<"p2="<<p2<<" *p2="<<*p2<<endl;
	
	//定義指向常量的常指標
	const int * const p3=&x;
	p3=&y;//不可以改變常指標的指向。
	*p3=100;//不可改變常指標指向的常量的值。
//總結:
//const靠近資料型別就是修把該型別的變數變成常量,
//const靠近指標就是修飾把這個指標變成常指標
	return 0;
}


相關推薦

C++ const指標結合

區別方法: 如果const位於*的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量; 如果const位於*的右側,const就是修飾指標本身,即指標本身是常量。 換句話說,如果con

const修飾符、const指標一起使用(C++學習筆記 6)

一、 在C++中使用const修飾符來定義常量。(const來自單詞constant,是常量的意思) 用法:const 型別 常量名 = 表示式; 例如:const int LIMIT = 100; 這個常量LIMIT是有型別的,佔用儲存單元,有地址,可以用指標指向它,但不能修改它。

C++中const指標、引用的總結

C++中函式的引數相比C語言中的函式引數要複雜的多,其中主要的原因是C++中引入了引用以及const限定符。這兩個物件的引入,使得C++中的函式引數變得異常的複雜多變,每一種型別都具有比較適合的使用範圍。 一,引用 引用是物件的別名,必須在初始化的過程中與一個具體的物件繫

C++ const 引用 指標答疑

常變數 const int a 常引用 const int &a 常指標 const int *a const * int a 用法1:常量     取代了C中的巨集定義,宣告時必須進行初始化(!c++類中則不然)。const限制了常量

c++引用指標的區別

 ★ 相同點:     1. 都是地址的概念;     指標指向一塊記憶體,它的內容是所指記憶體的地址;引用是某塊記憶體的別名。     ★ 區別:     1. 指標是一個實體,而引用僅是個別名;     2. 引用使用時無需解引用(*),指標需要解引用;   

const指標:指向const指標const指標

指標,可以說是C語言程式設計的掌上明珠,而將const應用於指標,會產生一些挺微妙的現象。 指向const的指標 第一種用法是令指標指向一個常量,稱之為指向const的指標,可以防止使用該指標修改所指向物件的值; int age=40; const int *p

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

指標,可以說是C語言程式設計的掌上明珠,而將const應用於指標,會產生一些挺微妙的現象。 指向const的指標 第一種用法是令指標指向一個常量,稱之為指向const的指標,可以防止使用該指標修改所指向物件的值; int age=40; const int *pt=&

C++陣列指標

一、一維陣列 1.1宣告並初始化一維陣列 type 陣列名[整型常量表達式]={陣列元素} 宣告時可以不指明陣列長度,編譯器將根據初始化列表的長度作為陣列長度 若初始化列表的初始值數少於元素數目,則其餘元素均初始化為0 1.2使用一維陣列 陣列名[下標],從0開始,

c語言指標——(二)指標變數的定義賦值

        由上一節,我們知道了,指標就是地址,而變數的指標就是變數的地址,存放變數地址的變數就是指標變數。指標變數可以指向另一個變數,在程式中使用" * "來表示這種指向關係。 1.指標變數的定義         指標的定義依然遵循先定義後使用的原則,在使用前必須先定

Linux C----陣列指標

1、陣列陣列:陣列是一種複合資料型別,它由一系列形同型別的元素組成。例:定義一個由5個int型元素組成的陣列 count:int count [5]. 注意:1、對於同一陣列,其元素的資料型別是相同的。           2、陣列名書寫規則應符合識別符號書寫規則。     

const指標及初始化

1.常量本身必須初始化,因此對於本身是常量的指標,必須初始化,比如int* const p=&a; 2.對於指標本身不是常量,但是指向的物件是常量的指標,可以不初始化,比如const int *p、int const *p;  const是一個C語言的關鍵字,它

C++引用指標的關係

(1)引用總是指向一個物件,沒有所謂的 null reference .所有當有可能指向一個物件也由可能不指向物件則必須使用 指標.  由於C++ 要求 reference 總是指向一個物件所以 reference要求有初值.  String & rs = stri

c++引用指標的區別(著重理解)

 ★ 相同點:     1. 都是地址的概念;     指標指向一塊記憶體,它的內容是所指記憶體的地址;引用是某塊記憶體的別名。     ★ 區別:     1. 指標是一個實體,而引用僅是個別名;     2. 引用使用時無需解引用(*),指標需要解引用;     3.

C++中const引用,指標之間的關係要點

一、const關鍵字 1、有時我們希望定義這樣的一個變數,它的值不能被改變。這時就可以在定義變數時加上const關鍵字。例如 const int bufSize=512; const型別變數可以進行大部分與非const型別變數相同操作,主要的限制就是不可以在const型別的物件上執

c語言程式設計進階week3:刪除字串中的子串(字串指標的完美結合

題目來源自mooc:C語言程式設計進階,僅供個人學習參考使用 #include <stdio.h> #include <string.h> int main(){

C++ defineconst

編譯期 多個 簡單的 存儲空間 const常量 ons efi 指針變量 錯誤 C++中不但可以用define定義常量還可以用const定義常量,它們的區別如下: 用#define MAX 255定義的常量是沒有類型的,所給出的是一個立即數,編譯器只是把所定義的常量值與

c指標》第13章課後習題4

#include <stdio.h> #include <stdlib.h> #include <string.h> int arry[4] = { 6, 2, 3, 1 }; int cmp ( void * a, void * b) { return

C語言】一維陣列、二維陣列指標

一維陣列和指標: 1、一維陣列名: 對於這樣的一維陣列:int a[4];  a作為陣列名就是我們陣列的首地址, a是一個地址常量 .  首先說說常量和變數的關係, 對於變數來說, 用箱子去比喻再好不過了, 宣告一個變數就宣告一個箱子,比如我們開闢出一個蘋果型別的箱子, 給這個變

C++的頂層const底層const

首先:頂層const表示指標本身是個常量,底層const表示指標所指的物件是一個常量。更一般的,頂層const可以表示任意的物件是常量,這一點對任何資料型別都適用。底層const則與指標和引用等複合型別的基本型別部分有關。 書上的一些例子: int i = 0; int *const p

C語言 指標基礎篇 陣列,函式指標的運用 2 14

下面看看如何在函式中運用指標吧  下面是往函式傳入指標的簡單操作,不是傳入陣列的。判斷一個a是否大於b是的話給,是的話對其進行操作,不是的話就直接返回。 1 #include <stdio.h> 2 int main(){ 3 int num1,num2,*p1,