指標基本知識
阿新 • • 發佈:2018-12-22
指標變數初始化
如:int a=5,*c=&a(a的地址賦值給了c,*c=5)
和以下等效:int a,*c;
a=5;c=&a;(*c=&a是錯的)
不要訪問沒有被初始化的指標變數
如:int *p;
cin>>*p;
因為p沒有初始化,p中可能存在一個不確定的單元地址,這時的輸入會改變原儲存單元的值,造成結果混亂。
指標作函式的引數
例子: void swap(int *a,int*b) { int t; t=*a; *a=*b; *b=t; } 程式碼裡交換的是x和y的值,記得帶上*號 呼叫時: swap(&x,&y)這裡括號裡是xy的地址,有&
**計算一維陣列元素的平均值,並能帶回陣列中的最大值與最小值 **
double faver(int s[],int n,int *max,int *min) //n為一維數組裡有幾個元素 { double aver=s[0]; *max=*min=s[0]; for(int i=1;i<n;i++) {aver=s[i]+aver; //注意 if(s[i]>*max)*max=s[i]; if(s[i]<*min)*min=s[i]; } return aver/n; } int main { int a[5]={80,89,67,76,98},max,min; double aver; //因為平均數不一定是整數,所以aver定義為double型 aver=faver(a,5,&max,&min); cout<<"max="<<max<<"min="<<min<<endl; cout<<"aver="<<aver<<endl; return 0; }
返回指標的函式
如:“ using namespace std” 返回“using namespace std” 知識:返回字串,就是返回字串的首地址 例子: char *noblank(char *str) { while(*str==‘’)str++; return str; } int main() { char *s1=“ using namespace std”,*s2; s2=noblank(s1); cout<<s2<<endl; return 0; } ** 剛開始這裡有一些疑惑,為什麼輸出的是s2,不是*s2 解答:如果指標指向存有字串的字元陣列的首地址,cout<<指標;顯示的是字串內容。這是規則問題。**
以下有兩個語法方面問題
#include <iostream>
using namespace std;
int main()
{
char *s1="hahaha";
cout<<s1;
}
#include <iostream>
using namespace std;
int main()
{
char s1[]="hahaha"; //不加*,就得有[]
cout<<s1;
}
定義指標變數時,char *s1;cout<<s1就可輸出,若沒有*,cout<<s1就會出現錯誤
注意:整數、double陣列不能整體輸入、輸出。。
int a[10];
cin>>a; 不正確
cout<<a;
字元陣列,char s[100];存字串,可以"整體"輸入輸出.
cin>>s;//正確,輸入字串
cout<<s;
指向函式的指標變數
例:double(*pf)(double)
pf=sqrt; //pf指向一個平方根函式
這時,使用*pf可以呼叫該函式
這裡我也不是很清晰,學到後面再返回來看吧