指针基本知识

指针变量初始化

如: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;

指向函数的指针变量

猜你喜欢

转载自blog.csdn.net/wupanP/article/details/83959714
今日推荐