C 中與指標相關的一些問題

2021-04-15 11:42:06 字數 1259 閱讀 7372

*「指向常量的指標型別」與「指標型別的常量」

const int* p=null;  //定義了指向常量的指標型別

int x=0;   //定義變數x

int y=0;   //定義變數y

p=&x;    //ok,讓p指向變數x

*p=1;    //error,不能改變指向常量的指標所指位址中的值

int* const q=&y;  //定義了常量指標q,並讓其指向變數y

q=null;    //error,不能改變常量指標所指向的位址

*q=1;    //ok,改變y的值為1

const int* const pq=&x;  //定義了指向常量的常量指標pq

pq=&y;    //error,不能改變常量指標所指向的位址

*pq=1;    //error,不能改變指向常量的指標所指位址中的值

int* pz=null;   //定義指標pz

const int z=0;   //定義常量z

pz=&z;    //error,不能讓普通指標指向常量,除非const int* pz;

*用指標向函式傳遞實參的位址

因為c++預設的引數傳遞方式是按值傳遞(陣列除外),改變形參的值不會影響相應實參的值。這樣做的優點是:避免了函式的***;缺點是:對於傳遞記憶體占用較大的引數時效率不高,另外,有時也限制了利用函式的***來得到多個返回值的情況。用指標向函式傳遞實參的位址解決了上述兩個缺點。請看下面兩個例子:

(1)void swap(int* x,int* y) //利用函式的***

(2)void method(myclass* mc);//提高了引數傳遞效率,注意,這裡可能有引數***帶來的問題

值得一提的是,如果想提高引數的傳遞效率但又想避免函式***的發生,那麼「指向常量的指標」將是個不錯的選擇,如void method(const myclass* mc);//在函式體中不能改變mc所指物件的內部狀態.

*函式指標

c++中可以定義乙個指標變數,使其指向乙個函式,定義格式為《返回型別》 (*《指標變數》)(形參表)  例如下面的函式指標變數fp: double (*fp)(int);它可以指向的函式如double f(int x);//請注意(*fp)的(),去掉後就變成定義了返回型別為double* 的函式了。

*"int (*p)[10]"和"int *p[10]"

前者定義了乙個指標變數p,它可以指向乙個由10個int元素所構成的一維陣列;後者定義了乙個由10個元素所構成的一維陣列變數,它的每乙個元素是int*型指標。 

C中陣列指標的一些問題

1.有乙個二維陣列 int a 3 4 對於a相關的一些指標,具體含義如下 對於一位陣列int a 10 a是陣列首元素的位址,a是整個陣列的位址。所以a 1和 a 1的步長不一樣,前者的步長是4,後者的步長是40。2.定義乙個陣列型別 typedef int myarray 10 myarray ...

C 指標的一些問題Mark

翻了下以前的blog,兩年以前的了。當時還說每天練一點,慢慢熟悉,簡直 雙重指標 p 假如我有乙個m n維的陣列array,想要對應到指標p q r上去 int array m n int p n int q int r m r m 好理解,r是乙個m元的陣列,每個元素是乙個指標。指標 p和陣列p到...

phpstudy相關的一些問題

phpstudy相關 phpstudy for linux lnmp lamp一鍵安裝包 如何切換php版本 假如你先安裝的apache php5.3 想切換成nginx php5.4 你就再走一次.phpstudy.bin 但是你會發現有一行是否安裝mysql提示選不安裝 這樣只需要編譯nginx...