指针变量初始化
如: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可以调用该函数
这里我也不是很清晰,学到后面再返回来看吧