计算机程序设计基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
q=&b;
//赋值给指针变量q,让q指向变量b
*q=*p;
//将p所指向的akey的值赋给q所指向的变量b
printf("b=%d\n",b); //输出b的值
printf("*q=%d\n",*q); //输出b的值
}
//函数体结束
9
第9页/共17页
p
&akey
q
&a
66
&akey
*q=*p
66
}
7
第7页/共17页
说明:见图
0
1
2
3
4
&a[0] &a[1] &a[2] &a[3] &a[4]
p1 &a[1] &p1
p2 &a[2] &p2
p1和p2分别指向a[1],a[2],这里 ➢ & —— 取地址运算符 ➢ * —— 指针运算符(间接访问运算符) ➢ *p1——间接访问p1所指向的内存单元,当然是输出a[1]的值 ➢ *p2——间接访问p2所指向的内存单元,当然是输出a[2]的8 值
指针变量——用来存放另一变量地址的变量 变量的指针就是变量的地址。
1、指针的概念 指针是一种特殊的变量,特殊性表现在类型和值上。 从变量讲,指针也具有变量的三个要素:
➢ (1)变量名,这与一般变量取名相同,由英文字符开始。 ➢ (2)指针变量的类型,是指针所指向的变量的类型,而不
是自身的类型。 ➢ (3)指针的值是某个变量的内存地址。
4
第4页/共17页
3、指针赋值 例 int akey; // 定义一个整型变量akey int *p,*q; // 定义p,q为指向整型变量的指针变量 akey=66; // 将变量a的地址赋给p,这时见图1 q = p; // 将p的值赋给q,见图2
p
a
&a
&p p 变量的地址
66
图1 &a a 变量的地址
然走廊上的电话铃声响起。艺高人胆大,阿金毫不
迟疑,抓起听筒,一个陌生人说:“去打开211房
间,那里有线索”。阿金疾步上楼,打开211房间,
用电筒一照,只见桌上赫然6个大字:地址1000。
阿金眼睛一亮,迅速找到1000房间,取出重要数据
66,完成了任务。
1
第1页/共17页
我们画出下图
P
1000
211
…
66
…
1000
说明:
1、数据藏在一个内存地址单元中,地址是1000。
2、地址1000又由P单元所指认,P单元的地址为211。
3、66的直接地址是1000;66的间接地址是211;211中 存的是直接地址1000。
4、称P为指针变量,1000是指针变量的值,实际上是有
用数据藏在存储器中的地址。
2
第2页/共17页
&b
10
第10页/共17页
5、指针与数组 先看一个程序
// 指针3.c
#include <stdio.h>
//预编译命令
void main()
//主函数
{
//函数体开始
int a[5]={1,3,5,7,9}; //定义数组,赋初值
int *p;
//定义指针变量
int i;
//定义整型变量
p=a;
第8页/共17页
4、向指针所指向的内存单元赋值
// 指针2.c
#include <stdio.h>
//预编译命令
void main()
//主函数
{
//函数体开始
int akey,b;
//定义整型变量
int *p,*q;
//定义指针变量
akey=66;
//赋值给变量akey
p=&akey;
//赋值给指针变量p,让p指向变量akey
➢ (2) p=p+1; 如p指向a[0], 则p=p+1之后,p指向a[1]
➢ (3) 如果p=a 等效于 p=&a[0]; 则 p=a+4 等效于 p=&a[4];
p
p
Leabharlann Baidu
p+1
a[0] a[1]
等效 p+1
*p *(p+1)
a[2]
*(p+2)
p+2
p+2
a[3]
*(p+3)
a[4]
第12页/共17页
//预编译命令
void main()
//主函数
{
//函数体开始
int a[5]={0,1,2,3,4};
//定义数组,赋初值
int *p1,*p2;
//定义指针变量
p1=&a[1];
//赋值给指针变量,让p1指向a[1]
p2=&a[2];
//赋值给指针变量,让p1指向a[2]
printf("a[1]=%d;a[2]=%d\n",*p1,*p2); //输出a[1]和a[2]的值
3
第3页/共17页
从上面的概念可知,指针本身类型是int型,因为任何内存地 址都是整型的。但是指针变量的类型却定义成它所指向的 变量的类型。
2、指针的定义(说明,先说明后引用) 例如: int *p, *q; // 定义p,q为指向整数类型变量的指针 float *point; // 定义point为指向float型变量的指针 double *pd; // 定义pd为指向double型数组的指针 int (*pa)[10]; // 定义pa为指向int型数组的指针 int (*pu)(); // 定义pu为指向int型函数的指针 int **qq; // 定义qq为指向int型指针的指针 还有指向结构、联合的指针,后面再介绍
*(p+4) 12
做下面的实验
// 指针4.c
#include <stdio.h>
图 1 的说明:将 a 变量的地址赋给指针 p,意味着让指针 p 指向 a
5
第5页/共17页
p
a
q=p;
&a
&p
q
&a
&q
66
图2
图 2 的说明:当着执行 q=p;之后,p 中所存的 a 变量的 地址值,也就被放到 q 变量中,意味着让指 针 q 也指向 a
6
第6页/共17页
// 指针1.c
#include <stdio.h>
指针是C语言中的一个重要概念。掌握指针的用 法,可使程序简洁、高效、灵活,但并不难学。
为了了解什么是指针,先看一个小故事
地下工作者阿金接到上级指令,要去寻找打开
密电码的密钥,这是一个整数。几经周折,才探知
如下线索,密钥藏在一栋三年前就被贴上封条的小
楼中。一个风雨交加的夜晚,阿金潜入了小楼,房
间很多,不知该进哪一间,正在一筹莫展之际,忽
//赋值给指针变量,让p指向a数组
for(i=0;i<5;i=i+1)
{
//循环体开始
printf("a[%d]=%d\n",i,*p);//输出a数组元素的值
p=p+1;
//指针变量加1
}
//循环体结束
}
//函数体结束
11
第11页/共17页
说明
➢ (1) p=a; 这里数组名作为数组的起始地址,即a[0]的地址。 因此 p=a 等效于 p=&a[0];