常指針怎麼定義?

General 更新 2024-11-14

指向常整型數據的常指針該怎麼定義?

你的意思是,指針本身不可修改,指向的內容也不可修改?

const揣int n = 0;

const int * const ptr = &n;

指針可改,內容不可改

const int * ptr

指針不可改,內容可改

int * const ptr

c++中關於 “指向常量的指針”和“ 常指針”的定義聲明, 很是不理解啊。

觸一個是指向常量的指針

第二個是常量指針

很簡單啊,看*前面的東東,它表示指針指向的類型,第一個const char就是常量,第二個char當然是普通字符型了,*後面的const表示這個變量本身是常量,即常指針。

指針常量 指向常量的指針各是怎麼定義的?

指向常量的指針實質還是指針變量,可以在職想別的量。。。而指針常量是不能改變指向的指針,數組名供【】就是指針常量

指針常量指向常量的指針各是怎麼定義的

指向常量的指針實質還是指針變量,可以在職想別的量。。。而指針常量是不能改變指向的指針,數組名a【】就是指針常量

C語言中,定義指針常量的方法

ct9789: 你好。 指針: 其實指針這個概念在譚浩強的 這本書上是這樣說的,指針就是地址,指針值就是地址值。指針變量就是存放指針的 變量,所以一定不要將指針與指針變量搞混淆了。指針僅僅是一個地址值,而指針變量就是存放指針(也就是地址的變量) 指針的定義: 例如整型指針: int *p;p是一個指向int類型數據的指針變量。裡面存放的地址(也就是指針)是一個int類型變量的地址。指針變量時 有類型的,例如p的類型就是int *表示p是一個指向int類型的指針變量。如何知道一個指針變量的類型呢,最簡單的方法就是去掉變 量定義語句中的變量名,剩下的部分就是其類型,這種方法適用於所有的變量定義,例如int a;a的類型是int 。 int b[10];b的類 型是int[]表示是一個數組(關於數組類型這裡不談,因為這個問題很微妙,其實在c、c++中沒有數組類型這個概念,包括函數類型也 是一樣的),int *c;c的類型是int *。int ** d;d的類型就是int **;所以通過這種方法來判斷一個變量的類型是很方便的。 說道指針變量,我們必須說到得有幾個方面。 1.指針類型。 這個很重要,一個指針是有類型的,也就是一個地址是有類型的。具體說是某一個地址會指向不同類型的數據,這是不一樣的,例如 int *p;p是指向int型數據。 double*p1;p1是指向double型數據。但是p和p1本身在內存中佔用的空間是4個字節(對於32位的系統來說 ),如果是在TC中編譯c程序,應該是2個字節了(dos操作系統是16位的)。有人說地址不就是一個值嗎,類似於0xfffdddcc這樣的地址 數值,為什麼還分什麼類型呢,我要說的是這個關係很大。我們知道指針是有運算的,int *p=&a;那麼p++到底加了多少呢,不要以為 是將p裡面的地址值加了1,這是完全想當然。實際上加了sizeof(int)這麼多個字節。也就是說加了一個int元素應該佔用的字節,這 樣在數組中我們可以通過這種方式從上一個元素很方便的讓指針變量指向下一個元素。p+5的話實際上是加了p+sizeof(int)*5這麼多 個字節。 另外一點事指針的類型決定了當指針解引用的時候其所以指向的內存單元中的二進制數據如何解釋的問題。例如int *p=&a; 那麼(*p)取得的數字就是一個整型數據,如果(*((char *)p))得到的就是一個字符型數據了。p本來指向的是int型數據(有4個字節)的 首地址,如果將其強制轉換為一個指向char類型的指針變量,那麼在解引用的時候只取第一個字節的數據,並將其解釋為一個ascii碼 代表的字符。 還有如果是一個指向函數的指針變量,我們可以通過此指針變量直接調用函數。例如int(*function)(int);此時 function指向一個函數,此函數具有一個int參數,返回一個int值。那麼通過指針可以這樣調用該類型的函數了int a=function (100); 或者int a=(*function)(100);其實要不要解引用都是可以的。不過以前是需要解引用的,現在c標準規定這兩種方法都可以。 總的來說指針的類型很重要。 2.指針與數組。 我們向一個函數傳遞數組的時候一般是傳遞數組名,我們知道數組名是一個代表數組中第一個元素的地址並且數組名是不可以當左值 的。其實你又沒有想過數組名到底是什麼呢。有人說其實數組名就是一個指針常量,是一個不可以改變的指針常量。例......

關於常指針

需要定義p為const int *p=&a;

因為如果可以定義int *p=&a;

那麼不是可以使用*p=1;這樣的賦值語句來修改a的值嗎?

而a本身是const,意思即a的值不可修改。

所以要使用const int *p=&a;,表明p所指向的int值是不可修改的。

如果先定義一個常變量,且用一個常指針來指向常變量,那麼可以通過常指針來改變常變

你的理解出現了偏差

注意這句話int* const pi=(int *)&i; 這句話聲明瞭一個int* const 類型的指針

但是你既然這麼定義,那麼就是說指針pi不可以改變,但是*pi即pi指向的的值是可以改變的

你主要沒弄明白int* const pi=(int *)&i; 與int const* pi=(int *)&i; 的差別

int const* pi=(int *)&i;才表示pi指向的值為const類型,但是指針的地址可以改變

C++中常函數的返回值是數組指針就要定義為常指針 返回值是變量指針就不用定義為常指針 是這樣嗎?

可以這麼理解

但本質是,指針(即你理解的變量指針)所指向的內存不歸該函數所屬對象管,因此不需要定義為const類型指針;但數組(即數組指針)的內存歸該函數所屬對象管,因此你需琺定義為const類型指針,原因是const函數規定了其所屬對象的所有內存是不可寫的。

常指針(指針常量/指向常量的指針)的問題

const char *p; 常量指針,指向一塊區域,這塊區域不可寫,只能讀。

char * const p; 指針常量,指向一塊區域,這塊區域可讀可寫,但是指針的值初始後就不能改,類似於一般常量。

const char * const p; 上面兩種類型的綜合,指針指向的區域不可寫,可讀。指針初始化後不能改。

至於有什麼用,看具體要求。

比如飢har * stpcpy(char *s1, const char *s2) 這個函數,把常量指針s2指向的字符串copy到s1中,const 修飾符表明這個函數不會也不能對s2指向的字符串作任何修改。

相關問題答案
常指針怎麼定義?
廣聯達剪力牆怎麼定義?
端柱怎麼定義?
鼠標指針怎麼換圖案?
廣聯達門聯窗怎麼定義?
電腦鼠標指針怎麼改?
鼠標指針怎麼換皮膚?
壓牆筋怎麼定義?
廣聯達連樑怎麼定義?
特約經銷商和獨家代理是怎麼定義的?他們之間有什麼區別 ?