1樓:
第一處:無錯。
第二處:把*p1=*p2;改成*p2=*p1;。
第三處:把p2='\0';改成*p2='\0';。
急求c++ 指標問題
2樓:慶梧申爾雲
私有資料是不可以通過類外定義指標訪問的,當然可以把私有成員前面加一個關鍵字
3樓:
這裡編譯器預設a是陣列名 也就是陣列的首地址 相當於指標 變數a換個名字 比如c應該就行了
4樓:匿名使用者
這個問題是因為你的變數名與陣列名重名了。更改一下變數名就行了。
5樓:
for(i=0;i<10;i++) b[i]=a[i]-a[0];
這個需要看想表達什麼意思了,上面的可能是不對的,具體需要根據要求來了
6樓:匿名使用者
b[i]=a[i]-a; 可以改成 b[i]=a[i]-sizeof(a);
7樓:匿名使用者
b[i]=a[i]-a,你不覺得-a有問題麼
8樓:小小的仙神
b[i]=a[i]-a;改成b[i]=a[i]-a[0];
c++關於指標的解釋和new 關鍵字
9樓:匿名使用者
指標就是一種變數,他也有一般變數的特性,但它又具有一些特殊,因為它存的是地址,可以通過他訪問另一個變數。所以指標就是存放地址的變數,
有的情況下用指標很方便,就如連結串列,你不知道資料個數的情況下用連結串列就很好,又如再一個窗體呼叫另一個窗體的函式時。還有些特殊情況只能通過指標呼叫。
10樓:匿名使用者
new 只是為物件分配一塊記憶體
而指標是指向這個記憶體地址的變數
如myfun()
當退出該函式後,系統為str分配的記憶體就會被釋放,也就是str指向的記憶體中東西沒了
而p指向的記憶體不會被釋放,該段記憶體中的東西依然存在,並可以通過指標p對該記憶體操作
11樓:匿名使用者
關於new,這裡有詳細的解釋:
c++this指標詳解
12樓:董俊錕
this指標只能在一個類的成員函式中呼叫,它表示當前物件的地址。下面是一個例子:
void date::setmonth( int mn )
1. this只能在成員函式中使用。
全域性函式,靜態函式都不能使用this。
實際上,成員函式預設第一個引數為t* const register this。
如: class a};
其中,func的原型在編譯器看來應該是: int func(a* const register this, int p);
2. 由此可見,this在成員函式的開始前構造的,在成員的結束後清除。
這個生命週期同任一個函式的引數是一樣的,沒有任何區別。
當呼叫一個類的成員函式時,編譯器將類的指標作為函式的this引數傳遞進去。如:
a a;
a.func(10);
此處,編譯器將會編譯成: a::func(&a, 10);
嗯,看起來和靜態函式沒差別,對嗎?不過,區別還是有的。編譯器通常會對this指標做一些優化的,因此,this指標的傳遞效率比較高--如vc通常是通過ecx暫存器來傳遞this引數。
3. 回答
#1:this指標是什麼時候建立的?
this在成員函式的開始執行前構造的,在成員的執行結束後清除。
#2:this指標存放在何處? 堆,棧,全域性變數,還是其他?
this指標會因編譯器不同,而放置的位置不同。可能是棧,也可能是暫存器,甚至全域性變數。
#3:this指標如何傳遞給類中函式的?繫結?還是在函式引數的首引數就是this指標.那麼this指標又是如何找到類例項後函式的?
this是通過函式引數的首引數來傳遞的。this指標是在呼叫之前生成的。類例項後的函式,沒有這個說法。
類在例項化時,只分配類中的變數空間,並沒有為函式分配空間。自從類的函式定義完成後,它就在那兒,不會跑的。
#4:this指標如何訪問類中變數的/?
如果不是類,而是結構的話,那麼,如何通過結構指標來訪問結構中的變數呢?如果你明白這一點的話,那就很好理解這個問題了。
在c++中,類和結構是隻有一個區別的:類的成員預設是private,而結構是public。
this是類的指標,如果換成結構,那this就是結構的指標了。
#5:我們只有獲得一個物件後,才能通過物件使用this指標,如果我們知道一個物件this指標的位置可以直接使用嗎?
this指標只有在成員函式中才有定義。因此,你獲得一個物件後,也不能通過物件使用this指標。所以,我們也無法知道一個物件的this指標的位置(只有在成員函式裡才有this指標的位置)。
當然,在成員函式裡,你是可以知道this指標的位置的(可以&this獲得),也可以直接使用的。
#6:每個類編譯後,是否建立一個類中函式表儲存函式指標,以便用來呼叫函式?
普通的類函式(不論是成員函式,還是靜態函式),都不會建立一個函式表來儲存函式指標的。只有虛擬函式才會被放到函式表中。
但是,既使是虛擬函式,如果編譯器能明確知道呼叫的是哪個函式,編譯器就不會通過函式表中的指標來間接呼叫,而是會直接呼叫該函式。
# 7:這些編譯器如何做到的?8:能否模擬實現?
知道原理後,這兩個問題就很容易理解了。
其實,模擬實現this的呼叫,在很多場合下,很多人都做過。
例如,系統**函式。系統**函式有很多,如定時,執行緒啊什麼的。
舉一個執行緒的例子:
class a
void process(){}
};main()
這裡就是定義一個靜態函式來模擬成員函式。
也有許多c語言寫的程式,模擬了類的實現。如freetype庫等等。
其實,有用過c語言的人,大多都模擬過。只是當時沒有明確的概念罷了。
如:typedef struct studentstudent;
void initstudent(student* pstudent);
void addscore(student* pstudent, int score);
...如果你把 pstudent改成this,那就一樣了。
它相當於:
class student
const常量可以有物理存放的空間,因此是可以取地址的
///this指標是在建立物件前建立.
this指標放在棧上,在編譯時刻已經確定.
並且當一個物件建立後,並且執行整個程式執行期間只有一個this指標.
關於c++指標的問題。
13樓:璐人釔
因為fun接收的是char**,s只是char*,所以用&s
C語言指標問題,C語言指標問題?
文庫精選 內容來自使用者 zzbo2022 讓你不再害怕指標 前言 複雜型別說明 要了解指標,多多少少會出現一些比較複雜的型別,所以我先介紹一下如何完全理解一個複雜型別,要理解複雜型別其實很簡單,一個型別裡會出現很多運算子,他們也像普通的表示式一樣,有優先順序,其優先順序和運算優先順序一樣,所以我總...
C語言指標問題,C語言指標問題。
最大的寶寶 pointer是指標指向的一個值,此時為2,這個值再自加1自然為3。pointer此時還指向值2,減2的含義是指標回退兩個元素,自然指向了值6。指標本身有值,表示它指向的地址,這個值可以運算,表示對地址的修改。而指標指向的值,其實就是位於這個地址所存的值。在彙編以上層次的程式設計中,記憶...
C指標交換問題,c語言的指標交換問題
main char pt pt str 0 指標p指向motherstr 0 str 1 指標str 0 指向fatherstr 1 pt 指標str 1 指向motherfor i 0,i 2 i printf s n str i 這裡交換成功 這裡str是指標陣列,str 0 str 1 都是指...