指针(1)--简单理解

指针也就是地址

指针定义:

数据类型 * 指针名;

*号不同应用场景

1.定义指针的时候,类型说明符(后开紧跟的变量是一个指针变量)

2.解引用(通过*地址可以访问到真实物理内存)

3.四则运算乘号

注: 前两种情况只有在定义的时候表示类型说明,其余情况一律为解引用

&号不同应用场景

1.取地址符号

 2.位操作符号

int a = 10;

int b = 20;  //初始化

int *p = &a;  、//一级指针p 保存变量a的地址

*p = 100;  //*p=a=100

p = &b;  //保存b的地址

*p = 200; //*p=b=100

整型地址变量P保存整型变量a的地址 ,类型要统一

int **pp = &p; //二级指针pp,保存一级指针地址

*pp = &a;    // *pp = p = &a

**pp = 1000; // **pp = *p = a = 1000

*pp = &b;  // *pp = p =&b

**pp = 2000; //**pp = *p = b = 2000

二级指针变量pp保存 一级指针p地址

指针与普通变量唯一区别多了一步解引用操作

指针大小只跟系统大小有关即:32位系统为4字节,64位系统为8字节

    练习

    char a;
    int b;
    double c;
    char* p1 = &a;    //定义一个指针p1指向a
    int* p2 = &b;    //定义一个指针p2指向b
    double* p3 = &c; //定义一个指针p3指向c
    *p1 = 'w';     //通过p1 修改a的值为'w'
    *p2 = 100;     //通过p2 修改b的值为100
    *p3 = 3.14;    //通过p3 修改c的值为3.14
    printf("%c %d %f \n", *p1, *p2, *p3);   //打印 a b c三者的值

注:指针类型一定要和变量类型统一

指针应用

子函数(被调用函数)

父函数(调用函数)

子函数影响父函数(值传递不可取)

如:交换a 和 b 的值

void Swap1(int a,int b)//error  经典的值传递
{
	int tmp = a;          //原因swap1里面的a,b和main函数里面a,b的地址不同,
	a = b;                 //因此修改swap1里面a,b无法影响main里面的a,b
	b = tmp;
}

void Swap(int *pa, int *pb)//true
{
	int tmp;
	tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	Swap(&a, &b);
	printf("%d %d\n", a, b);

}

上一篇:指针与指针的指针


下一篇:7-5 左值和右值