关于指针的知识点

1函数的形参和在函数内声明的变量都是该函数的局部变量,不同函数的局部变量相互独立

2 void ab(int a,int b);调用时:ab(1,2);是把1赋值给a,把2赋值给b

3形参的改变和实参的改变无关。实际参数(简称实参)

4一个正确转换两个数的值的函数:

#include<stdio.h>

void swap(int* a,int* b)

{

   int t=*a;

   *a=*b;

   *b=t;

}

int main()
{

  int a=3,b=4;

  swap(&a,&b);

  cout<<a<<b<<endl;

   return 0;

}

5   *a是指:a指向的变量,而不仅是a指向的变量所拥有的值

6   *a =*a+1;是让a指向的变量自增1,也可以写成(*a)++,因为++运算符优先级高于去内容运算符*,所以要加括号

7这个程序是错误的

void swap(int* a,int* b)

{

   int* t;

   *t=*a;

   *a=*b;

    *b=*t;

}

 错误原因:t是一个变量(指针也是一个变量,只不过类型是指针),因此它的值在赋值前是不确定的。如果这个“不确定的值”所代表的内存单元恰好是能写入的,那么这段程序将正常工作;但如果它是只读的,程序可能崩溃。

8 sizeof 输出的是字节数 

   如:int a=3;

          int len=sizeof(a);

          cout<<len<<endl;

          输出结果为4(一个int占4个字节)

   如:double a=3;

          int len=sizeof(a);

          cout<<len<<endl;

          输出结果为8(一个int占8个字节)

     这里*a代表a[0],而不是整个数组

9在函数定义中的int a[ ]等价于int* a

10    a是数组名,a+1指向a[1]

       若p是指针,k是整数,p+k就是指向指针后面第k个元素

        p-k就是指向p前面第k个元素

11两种主要的求数组和的方法

1.

#include <iostream>


using namespace std;
 int sum(int* begin,int* end)
 {
     int len=end-begin;
     int cul=0;
     for(int i=0;i<=len-1;i++)
        cul=cul+begin[i];
     return cul;
 }
int main()
{
    int a[5]={1,2,3,4,5};
    cout<<sum(a,a+5)<<endl;
}

2.

#include <iostream>


using namespace std;
int sum(int* begin,int* end)
{
    int cul=0;
    for(int* p=begin;p!=end;p++)
        cul=cul+*p;
    return cul;
}
int main()
{
    int a[5]={1,2,3,4,5};
    cout <<sum(a,a+5) << endl;
    return 0;
}


原文地址:https://www.cnblogs.com/iamjuruo/p/7470972.html