指针的定义、初始化、解引用

1.指针的定义和初始化

(1)&a: 取地址符(单目运算符)

         a&b: 按位与(双目运算符)

         *的三种用法:

         (1) 乘法:3*4=12

         (2) int *p=&a; //定义指针变量

         (3) *p=100; //解引用

(2)int *p=&a; //定义整型指针变量(p)保存整型地址值

         *p=100; //间接访问符(解引用)通过p间接访问变量a的值并把a的值赋为100 

2.解引用

解引用是指针变量与普通变量的唯一不同

(1)通过一个简单的例子,了解指针:

         int a,b,c,d;

         int *p1=&a;    //定义一个指针变量p1指向a

         int *p2=&b;    //定义一个指针变量p2指向a

        *p1=100;        //解引用,把a的值赋为100

        *p2=200;        //解引用,把b的值赋为200

         p1=&c;           //p1指向c

         p2=&d;          //p2指向d

        *p1=300;       //解引用,把c的值赋为300

        *p2=400;       //解引用,把d的值赋为400

         p1=&c;          //p1指向c

         p2=&a;         //p2指向a

         p1=&d;         //p1指向d

        *p2=1000;    //解引用,把a的值赋为1000

        *p1=2000;    //解引用,把d的值赋为1000

(2)二级指针的解引用:

         int **pp=&p;   

        *pp=&a;          //p=&a,*pp就是p(解引用)

        *pp=1000;       //a=1000

3.总结:(1)指针==地址                  

             (2)获取任何变量的地址都是:&变量名

             (3)*指针变量名,则间接访问到(跳到、解引用)指针所指向的变量

4.指针的应用

调用函数,实现交换两个数的值。

//子函数的改变要想修改父函数的值,
//必须要1、传指针,2、解引用
void Swap_err1(int a,int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
//printf("%d,%d\n",a,b);
}

void Swap_err2(int *p1,int *p2)//有传指针,但是没有解引用
{
int *tmp = p1;
p1 = p2;
p2 = tmp;
}

void Swap_err3(int *p1,int *p2)
{
int *tmp;//野指针,悬挂指针
*tmp = *p1;
*p1 = *p2;
*p2 = *tmp;
}

void Swap(int *p1,int *p2)
{
int tmp= *p1;
*p1 = *p2;
*p2 = tmp;
}

int main()//调用函数,父函数
{
int a  =10;

int b = 20;
Swap(&a,&b);//被调用函数,子函数
printf("%d,%d\n",a,b);
return 0;
}

你可能感兴趣的:(C,C++)