1樓:
const int *a; //const修飾指向的物件,a可變,a指向的物件不可變
int const *a; //const修飾指向的物件,a可變,a指向的物件不可變
int *const a; //const修飾指標a, a不可變,a指向的物件可變
const int *const a;//指標a和a指向的物件都不可變
2樓:匿名使用者
我們知道,如果在程式中定義了乙個變數,系統在編譯時就會給這個變數分配記憶體單元。系統根據變數的型別,分配一定長度的空間。記憶體中的每乙個位元組(單元)有乙個編號,我們稱為記憶體位址。
我們可以將某個記憶體變數a的位址存放在另乙個記憶體單元(變數b)中。c++builider語言規定可以在程式中定義整型變數、實型變數和字元型變數等,也可以定義一種特殊的變數,專門用於存放變數位址。通過變數b找到變數a的位址,再根據這個位址找到變數a, 這就是我們所說的「間接訪問」方式。
由於通過位址能找到所需的變數單元,因此也可以說,位址「指向」該變數單元,乙個變數的位址稱為該變數的「指標」。如果有乙個變數專門用來存放另一變數的位址(即指標),它就叫做「指標變數」
3樓:匿名使用者
const 修飾它右邊那個
c++中定義指標問題
4樓:操羽
#include "stdafx.h"
#include
using namespace std;
int main()
{char a[50]="abc,de";
int j=2;
char *p=&a[j];
cout<<*p<
沒有問題,不知道你想說的是不是這個
5樓:匿名使用者
提意,有關陣列下標取址的時候,不要使用&a[j],請直接使用a+j做為指標。
6樓:低調明哥
我試過了啊,沒問題,樓主什麼意思?
c++中指標先定義再賦值的問題
7樓:匿名使用者
第一種寫法等於是初始化,第二種等於是有個賦值語句,而函式體外,是不能有執行語句的。執行語句要在函式體內。
8樓:
plength = &length; 是賦值語句了吧,應該在主函式中實現;前者是初始化。我也是初學者,呵呵,不知道對不
c++指標定義
9樓:匿名使用者
為了說清楚什麼是指標,必須弄清楚資料在記憶體中是如何儲存的,又是如何讀取的。
如果在程式中定義了乙個變數,在編譯時就給這個變數分配記憶體單元。系統根據程式中定義的變數型別,分配一定長度的空間。例如,c++編譯系統一般為整型變數分配4個位元組,為單精度浮點型變數分配4個位元組,為字元型變數分配1個位元組。
記憶體區的每乙個位元組有乙個編號,這圖中就是「位址」。
請務必弄清楚乙個記憶體單元的位址與記憶體單元的內容這兩個概念的區別。在程式中一般是通過變數名來對記憶體單元進行訪問操作的。其實程式經過編譯以後已經將變數名轉換為變數的位址,對變數值的訪問都是通過位址進行的。
這種按變數位址訪問變數值的方式稱為直接訪問方式,或直接訪問方式。
還可以採用另一種稱為間接訪問(間接訪問)的方式。可以在程式中定義這樣一種特殊的變數,它是專門用來存放位址的。
圖6.2是直接訪問和間接訪問的示意圖。為了將數值3送到變數中,可以有兩種方法:
直接將數3送到整型變數i所標識的單元中。見圖6.2(a)。
將3送到指標變數i_pointer所指向的單元(這就是變數i所標識的單元)中。見圖(b)。
所謂指向,就是通過位址來體現的。
由於通過位址能找到所需的變數單元,因此可以說,位址指向該變數單元。因此將位址形象化地稱為「指標」,乙個變數的位址稱為該變數的指標。
10樓:匿名使用者
int n = 10;
int *p = &n; //不管是c還是c++這句都是對的
int *p = n; //不管是c還是c++這句都是錯的!!!型別不匹配
在不同的地方*表示的含意是有區別的。
當*出現在型別定義時(型別之後的地方),如int *p;那這是告訴編譯器變數p的型別為int型別的指標(int*),所以你還可以這樣寫int* p;或int * p;都是可以的。
而直接出現在變數後(不是定義時),就表示解引用.
int *p;
p = &n;
是先定義p為乙個int型的指標,然後讓p等於(指向)整型n的位址
而int *p = &n; 變數p實際上是在定義的同時賦了初值,因此這裡p前面的*是要和型別(也就是int)合起來看,表示p是乙個int型的指標!此時,千萬不要把*和p一起來看!
所以int* p; //我有意把*寫得和int靠攏一些:),強調int*是一種型別
p = &n;
和int* p = &n;
是一回事
就好比:
int i;
i = n;
和int i = n;
是一回事
而*p = *p + 6;中p前面的*就是解引用符了
不要把概念搞混了啊,呵呵!
11樓:匿名使用者
你那個n是一種型別的物件,不是指標
而指標天生就是用來儲存位址的,
所以int *p = n是不合法的
12樓:匿名使用者
樓主只要記得把初始化和賦值分開就行了,沒有那麼複雜的。如果是在初始化,即int *p = ...中就應該跟乙個int *。你不要把它認為是賦值,而是設定p的初值。
不過c++確實在這裡很彆扭。事實上引用型宣告更彆扭,但是好象除了用其它特殊字元也沒有更好的辦法。:)
13樓:小玉是我老婆
為什麼?
不知道....
兩種形式而已.
乙個是先定義指標再賦值,另乙個是在定義指標的時候就初始化了.
c++中關於指標問題的詳述
14樓:匿名使用者
看到很多人問,我也試著說說,當是自己的回顧也好。
首先,什麼是指標,其實它也就僅僅是語言的一種資料型別而已,就這點說跟int,char什麼的沒什麼區別,既然是一種資料型別,那就肯定有它的型別了,而就是這點導致很多人覺得指標很難。。。
1.指標的型別由他定義時指向的資料型別決定,即 int * pint 可簡稱 int指標, void *(*fun)(int ,int) 即乙個特定函式的指標,只能指向 接受(int,int)引數,返回void *型別的指標,所以它的型別較多,hoho。
這也是為什麼會出現多級指標,如 int **p的原因。
這也是用好指標的關鍵,首先你要清楚了它是什麼型別的不是?
2.指標的內容: 儲存在指標裡的值指向儲存位址,*p 取出指標指向位址的儲存內容。
3.你說的指標的移動,所謂指標的移動,如*(p+n) 指標移動n個,究竟走了多遠?其實這完全有第一點,即他的型別決定,它指向的型別資料長度是多大(bytes),那移動一下就走多少儲存單元(bytes)。
例如。 char ch; char **p = ch;
為什麼要定義雙重的? 那是因為如果定義 char *p = ch,假設能通過編譯,那麼p++移動多少?按第一級陣列下標移動還是第二級?
who knows...編譯器當然不能讓你通過,因為它也不知到怎麼動這個指標了。
4.陣列作為引數傳遞的問題。其實對大多數編譯器來說(當然不能說全部。。。我也不知道幾種。。。),陣列作為引數,編譯器是生成指標的。也就是說
fun( char ch[10]) ... 其實傳遞的是 char **
5.本來想不到什麼了,看了你問的賦值問題,還是那句話,跟int ,double一樣,什麼樣的型別賦什麼樣的值...
總之。。。關鍵是弄明白它是什麼型別吧。
最後看乙個,前兩天在網上看的:
這個定義不是噱頭,有他的用處的
void ( *signal ( int sig, void (*func) (int) ) ) (int);
看明白了它的型別,自然知道怎麼賦值了
15樓:
我有的,要不要我發給你啊
c++類的指標定義
16樓:吉祥二進位制
c++中的類,本質上就是使用者自定義的乙個資料型別,因此它和內建資料型別在使用上有很多相似之處。 可以對比內建資料型別來理解。假設有乙個test的class。
要定義類的指標,如下:
test o_o; //定義test類的物件 o_o
test *p = &o_o; //定義乙個類的指標,指向o_o
與int型別對比:
int o_o; //定義乙個int型別的物件o_o
int *p = &o_o; //定義乙個int型別的指標,指向o_o
實際上是類似的。 不同之處在於建構函式、析構函式那塊。
同樣也可以使用new進行動態分配 。
int *p = new int (2); //動態分配乙個int物件並初始化為2
類test的動態分配也類似:
test *po_o = new test; //動態分配乙個test物件,這裡呼叫的是預設建構函式。
17樓:匿名使用者
不是,同樣是new可是含義是不一樣的。
對於int *parray = new int;這個的含義是在系統的堆空間上分配為int,也就是4個位元組的空間給parray,這個時候parray裡所指的值是沒有含義的,如你所說沒有定義值。
但是對於intarray * parray = new intarray來說,會激發intarray的建構函式,是否有意義則取決於intarray的建構函式的內容了。
18樓:
我是當一樣來理解的。
應該寫成這樣吧:
intarray * parray = new intarray();//括號
int * parray = new int();
兩個都不止是申明,已經初始化了。
第一句是建立(例項化)了乙個intarrya的物件,指標parray指向它。
第二句是建立(分配了)了int型別的記憶體空間,指標parray指向那個空間。
兩個指標都已初始化了。
c語言指標的概念,論述C語言中指標的概念和作用,並舉例說明
指標是c語言中廣泛使用的一種資料型別。運用指標程式設計是c語言最主要的風格之一。利用指標變數可以表示各種資料結構 能很方便地使用陣列和字串 並能象組合語言一樣處理記憶體地址,從而編出精練而高效的程式。指標極大地豐富了c語言的功能。學習指標是學習c語言中最重要的一環,能否正確理解和使用指標是我們是否掌...
關於c 中指標變數的問題,C 中關於指標的一些問題
int i point 1000 這條語句的含義也就是把1000賦值給i point變數自己!即 把1000當作地址值,賦值給i point變數 按理論,這裡不會出現語法上的錯誤而出現的應該是執行結果的錯誤!同意你的看法 但是有的編譯器可能會做這種檢查,對有這種直接給指標變數賦值常數進行錯誤報警或警...
怎麼理解C語言指標中a b,c語言中,指標問題! a b和a b,有什麼不同?a是指標
豬頭或火寶寶 你好!首先我們已經知道 a,b,都是指標變數,a表示指標變數所指向的值,同樣 b也是如此。a b就是表示把指標b所指向的值賦值給指標變數a所指向的值。但是要是指標a要是沒有初始化或是開闢空間的話,這樣賦值就有危險!例如 int a int b 5 a b 首先宣告一個指標變數a,但是系...