printf 指针地址_C语言零基础入门-指针-03
C语言零基础入门-指针-03
本节要点:
1,指针操作int类型数据。
2,指针操作float,char类型数据。
01. 指针操作int类型数据
其实这一小节主要是带大家回顾一下,因为前边我们已经讲了很多的指针栗子,并且这些例子都是基于int类型的数据。
01.1 指针的定义与使用
首先回顾一下指针变量是怎么进行定义与使用的。通过下边的一个例子就可以说明了(代码不复杂,只是加入了格式控制内容,所以较长)。
- 栗子
#include<stdio.h>
void main(){
// 1,
int a = 21;
int *p = &a;
printf(" p: %dn",p);
printf(" *p: %dn",*p);
printf("n");
// 2,
int *p1;
p1 = p;
printf(" p1: %dn",p1);
printf(" *p1 %dn",*p1);
printf("n");
// 3,
*p1 = 32;
printf(" p1: %dn",p1);
printf(" a: %dn",a);
printf("n");
}
- 运行结果
- 解析
先看第一部分:
- 首先定义了一个整形变量a=21,紧接着定义了一个指针变量p,并且给p赋予的初始值是a的地址。
- 再然后我们输出了一下整型变量p,由于p就是一个地址变量,所以他存放的是a的地址,因此输出p的时候就输出的是地址。
- 最后输出了一下
*p
,前边说过,*p
的作用是得到地址p中存放的数据,因此,输出了数据21。 - 地址图如下:
再看第二部分:
- 首先定义了一个指针变量p1,但是没有直接赋初始值。
- 然后我们把p的内容给p1了,因为p中存放的是a的地址,所以此时p1中存放的也是a的地址。
- 再然后输出一下p1,我们发现它的内容确实是a的地址。
- 于是同样使用
*p1
输出一下看看p1所指向的地址中存放的数据是什么,还是a的21。 - 地址图如下:
换一种地址图表示是这样的:
第三部分:
既然p1也已经指向了a的地址,所以我们就可以使用指针p1来修改a中的数据了。
最后输出一下a的值,发现的修改成功。
02.指针操作float,char类型数据。
02.1 指针定义详解
在前边我们只讲了int类型的指针,然后大家旧习惯用下边的定义方式。
int a = 23;
int *p = &a;
这里我们来分析一下 int *p = &a;
的含义。
- 首先开始的类型 int 是怎么确定的呢?,其实它的类型是由a的类型确定的。也许你会有疑问,为什么这个int不是指
*p
的类型是int呢? - 你想吖,地址肯定都是整数了,怎么可能会是其他类型。
所以:指针变量最前边的类型,是指这个指针 所指向的地址中 存放的数据 的数据类型吖。
02.2 float型指针
所以啊,我们定义float类型的指针的时候,这个float指的是:实际的数据的数据类型。见下边的栗子:
栗子:
#include<stdio.h>
void main(){
float a = 21.0;
float *p = &a;
printf(" p: %dn",p);
printf(" *p: %fn",*p);
}
结果:
分析:
- 指针变量前边的数据类型实际上是:这个指针指向的地址 中存放的数据的 数据类型。
- 指针变量的数据类型与其定义之时前边的数据类型无关,指针变量的数据类型恒为int。
02.3 char类型指针
刚才我们说了指针变量定义的时候,前边的数据类型其实是:这个指针所指向的地址中的数据的数据类型。
因此,定义char指针,他必须指向一个char类型的数据。
#include<stdio.h>
void main(){
char a = 'A';
char *p = &a;
printf(" p: %dn",p);
printf(" *p: %cn",*p);
}
结果:
这个就不解释了吧。原理与上边一样。
03. 结束
先到这里吧。
公众号:小小猿笔记
http://weixin.qq.com/r/_y9cRE3EbRASrQkn93rp (二维码自动识别)