指標的概念:指標用於指向物件,定義方法
datatype *elem
,可以用對變數取位址操作符「
&」來初始化指標,例如:
elem=&var1
,在指標上加乙個整型數值,其結果仍然是指標。
指標操作變數的方法:指標通過解引用操作符(「
*」)獲取指標指向的物件,從而實現間接操縱其所指物件的功能。例如:
string s(「hello world」);
string *sp=&s;
*sp=」goodby」; //the value of s will be changed
cout<<*sp;
指標與陣列:二者關係密切可以自動轉換。例如:
int ia=
;int *ip=ia; //
等同於int *ip=&ia[0];
測試指向陣列的指標與陣列直接的關係;
1、ip+i
與陣列&ia[i]
之間的關係;(相等)
2、*(ip+i)
與陣列ia[i]
之間的關係;(相等)3、對
ip值修改對陣列
ia的影響;(無影響)4、對
ip做解引用後,修改
*(ip+i)
的值,對陣列
ia的影響。(相應做了修改)
測試指標與陣列在函式中做形參時,形參在函式體中其值有修改,這種修改是否會導致呼叫體的傳入變數有所修改。
可分成以下幾種情況進行討論:
1、形參為指標,函式內修改其所代表的陣列的值,將導致主函式變數的值發生變化,而形參為陣列則不會導致修改;
#include
void f1(char *s1, char [6] ar)
void main()
輸出結果:
s1:hello
ar:hello
s1:okllo
ar:hello
2、想通過在函式體內實現指標的移動來實現主函式的指標指向物件發生變化是無效的,但是如果通過引用的話則可以;
#include
void f2(char *s1)
void main()
getchar();
return 0;
}輸出:
s1[0]:h
s1[0]:h
s1[1]:h
s1[1]:h
s1[2]:h
s1[2]:h
s1[3]:h
s1[3]:h
s1[4]:h
s1[4]:h
s1[5]:h
s1[5]:h
函式 陣列和指標的形參
有一點要注意,只有在函式原型或者是函式定義頭中,才可以使用int a代替int a 如 int sum int a,int n int a形式和int a形式都表示a是指向int的指標。但是,int a只能用於宣告形式參量。第二種形式 int a 則是提醒指標a指向的不止只乙個int型變數,還是乙個...
通過指標形參修改實參的值2
注意 圖示使用的位址只是假設的,並不是真正的記憶體位址,只是說明原理 上次說到的是修改基本型別的變數,這次來說修改指標變數的值 原因還是和以往一樣,函式只是改變了a的指向,並沒有影響到p 既然p是乙個變數,那麼要改變它就要通過傳遞它的位址找到它,然後修改記憶體資料,修改程式為 可以看到,成功改變了p...
那麼為什麼作為函式形參的陣列和指標申明可以互換呢?
那麼為什麼作為函式形參的陣列和指標申明可以互換呢?這是一種便利。由於陣列會馬上蛻變為指標,陣列事實上從來沒有傳入過函式。允許指標引數宣告為陣列只不過是為讓它看起來好像傳入了陣列,因為該引數可能在函式內當作陣列使用。特別地,任何宣告 看起來象 陣列的引數,例如 void f char a 在編譯器裡都...