且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《C语言解惑》—— 2.10 引入指针更方便

更新时间:2022-10-01 19:00:15

本节书摘来自华章出版社《C语言解惑》一 书中的第2章,第2.10节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.10 引入指针更方便

如果引入一个新类型的变量(例如p),使p等于变量的地址,p代表变量的值,即对于上面的例子,只要使“p=&a”就使p存储了变量a的地址&a,而“p” 就是a的值,这就大大简化了表达式。通过声明一个指针变量,就可以实现这种操作。
int a=25;
int *p;
p=&a;
虽然p是指针变量,但这个变量与基本变量不一样。基本变量与基本数据类型相对应,如int变量存储整型值,char变量存储字符值,等等。但指针变量p存储的是地址值,
所以
printf("%pn",p);
语句输出的是存储变量x的地址,它和语句
printf("%d",&x);
是等效的,都是输出十六进制地址值“0012FF7C”(其实,这个值取决于机器)。而且不管是何种类型的指针,编译器都给它分配4个字节。
既然p具体存放的地址是内存里存放变量a的地址,*p就是这个地址所保存的值,也就是变量a的值。所以语句
printf("%d",a);
输出变量a的值25,它的等效语句是
printf("%dn",*p);
下面是一个完整的演示程序。对比它们的输出,就会明白其中的奥妙。
【例2.16】演示输出指针的例子。

#include <stdio.h>
void main ( )
{   
        int a=25,*p;
        p=&a; 
        printf("%d,0x%p\n", a, &a);
        printf("%d,0x%p\n", *p, p);
}

使用“0x”标识地址是十六进制,程序输出如下。
25,0x0012FF7C
25,0x0012FF7C