黑马程序员--指针与变量

来源:互联网 发布:淘宝网排行榜在哪里 编辑:程序博客网 时间:2024/06/06 03:14

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

变量的指针就是变量的地址,存放变量地址的变量是指针变量,它用来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,用“ * ”表示指向的对象。不同于其他类型变量,指针变量是用来专门存放地址的。
例如已定义point为指针变量,那么*point是point所指向的变量。如图:
这里写图片描述
可以看出,* point也代表一个变量,它和变量i是同一回事。i=3就等价于* point=3。而*point=3的含义就是将3赋值给指针变量point所指向的变量。

需要注意的是,定义指针变量时,*表示该变量类型为指针类型变量,如 *point,指针变量名为point而不是 *point。
指针变量中只能存放地址,不能将任何非地址类型的数据赋给一个指针变量,例如int *point = 100;是错误的。
对于取地址运算符&和指针运算符*,例如&a为变量a的地址, *p为指针变量p所指向的存储单元的内容(即p所指向的变量的值)。

#include<stdio.h>int main(){    int a;    int *point;    a = 100;    point = &a;    printf("%d\n",a);    printf("%d\n",*point);    return 0;}

运行结果为:
100
100
程序中*point出现了两次,第一次为定义指针变量point,第二次则代表了point所指向的变量。“ point = &a ”不能写成“ *point = &a ”,因为a的地址是赋给指针变量point,而不是赋给 *point(即变量a)。
下面举一个指针变量一个用的例子:输入a和b两个 整数,按先大后小的顺序输出a和b。

#include<stdio.h>int main(){    int a, b, *p1, *p2;    printf("请输入两个整数,以逗号分隔:\n" );    scanf("%d,%d",&a,&b);    p1 = &a;    p2 = &b;    if (a<b) {        p1 = &b;        p2 = &a;    }    printf("a = %d,b = %d\n",a,b);    printf("max = %d,min = %d\n",*p1,*p2);    return 0;}

当输入21和36时的运行结果如下:
21,36
a=21,b=36
max=36,min=21
这里写图片描述
其实,a和b的值并未交换,只是p1和p2的值发生了变化,p1由原来的&a变成了&b,p2由原来的&b变成了&a,这样在输出*p1和 *p2时,实际是输出变量b和a的值了。这个算法不是交换整型变量的值,而是交换两个指针变量的值。

0 0