關於C 指標

2021-06-15 21:19:10 字數 2164 閱讀 5053

一.

怎樣給多維陣列動態分配記憶體

//allocate:

int **p = new int* [m];

for(int i = 0 ; i < m ; i++)

p[i] = new int[n];

//use:

for(int i = 0 ; i < m; i++)

for(int j = 0 ; j < n ; j++)

p[i][j] = i * j;

//free:

for(int i = 0 ; i < m ; i++)

delete p[i];

delete p;

二.字元陣列v字串指標:

字元陣列如果在函式裡宣告則在棧上分配記憶體空間.

char a[1034]="bac" --true,這時可以改變a位址範圍內的任一位址所指向的內容.如:a[0]='a'.而a的值一般是不變的,除非重新分配位址.

char a[1034];  a="bac"  --faile 因為"abc"有const char*型別的,而a是char的.

strcpy(a,"abc");    -true

如果宣告字串指標char *a ="abc"常量,當把常量賦給乙個指標(a)時,則a是在靜態儲存空間分配記憶體,原則上a位址裡範圍內指向的內容不可以改變.

char *a="abc";   a="bcd" --true 可以改變a的值,但不可以改變這個位址裡範圍內指向的內容.                                    char *a;  a="abc"; --true

char *a="abc"; a[1]='d';   -false

strcpy(a,"abc")    --false *a的值不可變

char *a=malloc(size); --則a在堆分配空間,相當於char a[size],用free釋放記憶體

char *a=new char(size);  --同上,不過要用delete釋放記憶體

這時strcpy(a,"abc"); a[n]='d';    --true

三.多型:

#include

using   namespace   std;  

class   a    

int   b;  

virtual   int   get()  

};  

class   c   :public   a  

int   d;  

int   add()  

int   get()  

};  

/*void   fun(a   &www)//第一版本  

*/  

void   fun(a   www)//第二版本  

int   main()  

{  

a   *pa;  

c   cc;  

pa=&cc;//很正常  

cout下面解釋func:  

第一版本是傳引用,就相當於是傳了指標,所以可以實現多型。func(cc)會呼叫c的get(),func(aa)會調a的get()。  

004016df       lea                   ecx,[ebp-1ch]  

004016e2       push                 ecx  

004016e3       call                 @ilt+350(fun)   (00401163)  

可看出,只用堆疊傳了指標,沒有挎貝物件。  

第二版本是傳物件,會調挎貝建構函式,這裡沒有定義,所以就進行了預設的挎貝。因為形參是基類a的,它不知道c又在它身上加了d這個成員,所以它就把乙個c的物件挎貝成了a的物件,a中沒有的成員d就被切割了。所以func(cc)和func(aa)都只會調a的成員函式get()。這種現象就是所謂的「物件切割」,經過挎貝後,c的物件被切割得只剩下a的部分了。  

0040172c       call                 @ilt+115(a::a)   (00401078)  

00401731       call                 @ilt+640(fun)   (00401285)  

很明顯調了a的挎貝建構函式,物件被切割。 

關於C指標

在 c語言中指標可以說是其精華,常有一句話,學會了指標你也就學會了 c語言。但是很多人不能理解指標。我寫這篇文章的目的是幫助大家理解指標,內容都是跟人的見解,沒有指標基礎的 c語言高手和不喜歡的就別看了。大家都認為,c語言之所以強大,以及其自由性,很大部分體現在其靈活的指標運用上。因此,說指標是 c...

C 關於懸掛指標

如果乙個地方指標既不為空,也沒有被設定為指向乙個已知的物件,則這樣的指標稱為懸掛指標。在程式裡面是很危險的事 如下 include stdafx.h include iostream using namespace std typedef string t void f int p int main...

C 中關於this指標

在學習完c語言之後,很大的感覺就是指標是貫穿c語言的核心,但是接觸到c 後,發現很多都是封裝好的,直接用就可以。其中有一塊問題就是,通過函式去呼叫類的成員,上好像是直接訪問的,但是又有很多問題,為啥這個類裡面的函式可以直接訪問這個類裡面的成員呢?這就是我們需要關注的this指標。首先來看下面這段 c...