C语言程序设计 指针变量的定义
C语言程序设计实训教程第7章 指 针

12
2)指针与一维数组 【例 7.6】 下列程序的运行结果是( )。[读 程序写结果,重庆市 2001年第 2次等级考试]
13
14
3)指向字符的指针
15
16
17
18
4)指针与二维数组
19
5)指向一维数组的指针(行指针) 【例 7.18】 对 int(﹡p)[5];的正确描述 是( )。[多选题,重庆市 2003年第 1次等级考 试] A. p是数组名 B. p是指针变量名 C. p数组中有 5个元素 D .p指向一个包含 5个元素的整型数组 E. p是一个整型数组 答案:B D
22
7)指针数组 当数组的元素类型为指针时,叫做指针数组。 【例 7.21】 下列程序的运行结果是( )。 [读程序写结果,重庆市 2004年第 2 次等级考试]
23
8)指针做函数参数 指针做函数参数的主要目的是利用在函数中, 利用指针去操作主调函数中的变量。 【例 7.22】 下列程序在数组中同时查找最大 值下标和最小值下标,并分别存放在 main函数的 变量 max和 min中,请填空。[读程序写结果,重 庆市 2003年第 2次等级考试]
10
【例 7.3】 由于指针的数据类型实际上是指定 指针所能指向对象的数据类型,所以不同数据类型 的指针变量不能相互赋值。( )[判断题,重庆市 2005年第 2次等级考试] 答案:对 分析:在某些特定情况下,可以在不同数据类 型指针之间通过强制类型转换赋值。
11
【例 7.4】 若有定义:long intj,﹡p;,则操 作 j=(long int)p;是合法操作。( )[判断题, 重庆市 2004年第 1次等级考试] 答案:对 【例 7.5】 在 C 语言中,程序
指 针 变 量

⑷定义指针变量后,并未确定该变量指向何处。 也就是说该变量的值是不确定的。在引用指针 变量前必须首先让它指向一个变量,这一点非 常重要。
首先介绍指针运算符(&,*)
“&”(地址运算符) :取变量的存储地址。 例如:&a 是求变量a的地址。
C语言程序设计
指针变量
1.1 指针变量的概念
指针变量:若一个变量专用于存放另一个变量 的地址(指针),则该变量称为指针变量。
1.2 指针变量的定义
一般形式: 类型标识符 *变量名 ;
例如: int *ptr1, *ptr2; 指针变量的类型:指明了该指针指向的内存空
间所存储的数据类型。
在定义指针变量时要注意以下几个问题:
ptr1-ptr2=(ptr1的值- ptr2的值) /指针的数据类型所占的字节数
例如:
int *ptr1,*ptr2,*ptr3,x; int ary[5]={2,4,8,16,32}; ptr1 = &ary[0] ; ptr2 = &ary[3]; ptr3 = ary; x=ptr2-ptr1;
⑵指针变量间的赋值和引用应保证基类型相同。
若有定义: int *p , i ; float *q , x ; 则:q=&i ; ╳ p=&x ; ╳
我们还可以用这种方法实现对变量的改变:
由此可见:通过指针 运 算 符 “ *” 可 以 引 用 一 个 变 量 。 如 : 当 ptr 已经指向变量i后, *ptr就等同于i。
例如:ptr+n (指针ptr,n为整数)这个指针值代表的内 存单元的地址是:ptr+n*d(其中d是指针所指向变量的 数据类型所占内存字节数),即指针移动了n个元素。
《C语言程序设计教程(第二版)》 第09章-指针(1)

访问p_int所 指向的变量
getch();
}
程序运行结果: num_int=12, *p_int=12 num_f=3.14, *p_f=3.14 num_ch=p, *p_ch=p
2019/2/22
11
1、指针变量的定义
指针变量的定义标识符
数据类型 *指针变量[,*指针变量2……];
例如, [案例9.1]中的语句:
int num_int=12, *p_int ;
特别说明:定义而未初始化的指针变量(例如 p_int)是悬空的。
使用悬空指针变量,很容易破坏系统,导致系统 瘫痪。
2019/2/22
12
2、取地址运算 : &变量名 例 如 , [ 案 例 9.1] 中 的 &num_int 、 &num_f 、 &num_ch 的结果,分别为对应变量的地址 (num_int 、 num_f、num_ch)。 注意:指针变量只能存放相同数据类型变量的 地址。 例如, [案例9.1]中的指针变量p_int、p_f、p_ch, 只能接收int型、float型、char型变量的地址,否则出 错。
使p_int指向变量num_int
2019/2/22
10
printf(“num_int=%d, *p_int=%d\n”, num_int, *p_int); printf(“num_f=%4.2f, *p_f=%4.2f\n”, num_f, *p_f); printf(“num_ch=%c, *p_ch=%c\n”, num_ch, *p_ch);
9.3* 1维数组的指针与列指针变量 9.4 字符串的指针和指向字符串的指针变量 9.5 指针数组与主函数main()的参数 9.6 返回指针值的函数
c语言指针的定义

c语言指针的定义C语言中,指针是一个非常重要的概念。
所谓指针,就是指向内存中某个变量的地址的变量。
定义一个指针变量时,需要使用“*”符号表示这是一个指针变量。
例如:int*p;这个定义表示变量p是一个整型指针变量。
指针变量可以指向任何类型的数据,包括基本数据类型、数组、结构体等。
指针的使用需要注意以下几点:1.操作指针变量时,需要使用“&”符号获取变量的地址,例如:int a=10;int*p=&a;这个例子中,p指向了变量a的地址。
2.操作指针变量时,需要使用“*”符号获取指针指向的值,例如:int a=10;int*p=&a;printf("%d",*p);这个例子中,使用“*p”获取了指针p所指向的变量a的值,并将其打印出来。
3.指针变量可以通过赋值操作改变所指向的变量,例如:int a=10;int b=20;int*p=&a;*p=b;这个例子中,通过将指针p指向变量b的地址,将变量a的值改变为了20。
4.指针变量可以作为函数参数传递,通过指针可以在函数内部修改变量的值,例如:void add(int*a,int b){*a+=b;}int main(){int a=10;add(&a,5);printf("%d",a);return0;}这个例子中,通过指针变量将变量a的地址传递给函数add,在函数内部修改了变量a的值。
总之,指针是一个非常重要的概念,在C语言中广泛应用于各类程序中。
熟练掌握指针的使用方法,是每个C语言程序员的必备技能。
《C语言程序设计》第8章指针

10.3.3 指针变量和数组作函数参数 数组名作形参时,接收实参数组的起始地址;
作实参时,将数组的起始地址传递给形参数组。
引入指向数组的指针变量后,数组及指向数 组的指针变量作函数参数时,可有4种等价形式 (本质上是一种,即指针数据作函数参数):
(1)形参、实参都用数组名 (2)形参、实参都用指针变量 (3)形参用指针变量、实参用数组名 (4)形参用数组名、实参用指针变量
(4)指针变量的++、--与&、*的结合
对于指针变量的++、--与&、*的结合 使用,关键要注意按照运算符的优先级和 结合性进行。
例如: int a=2, *p; p=&a;
•表达式:(*p)++,按运算符的优先级,等价于 a++。其含义为:取出指针变量p所指向的内存单 元的值(即a的值),a的值加1,送回a的内存单 元,a的值变为3,p的值未发生变化,仍然指向 变量a。
程序说明:printf("%s\n",s);语句 通过指向字符串的指针变量s,整体引
用它所指向的字符串的原理:系统首先输出s 指向的第一个字符,然后使s自动加1,使 之指向下一个字符;重复上述过程,直至遇到 字符串结束标志。
main() { char string[ ]=”I love Beijing.”; printf(“%s\n”,string); }
3.数组元素的引用 数组元素的引用,既可用下标法,也可用
指针法。
10.3.2 通过指针引用数组元素 如果有“int a [10],*p=a;” ,则: (1)p+i和a+i都是数组元素a [i]的地址。
(2)*(p+i)和*(a+i)就是数组元素a [i]。 int a [3]; a [0]——*a a [1]——*(a +1) a [2]——*(a +2)
C语言程序设计知识点—第8章 指针结构体与预处理命令

指针使用示例 2 void main() { int num1 = 50, num2 = 100; int *ptr1, *ptr2; ptr1 = &num1; printf(" num1 的值是: %d", *ptr1); printf("\n num1 的地址是: %x \n", ptr1); ptr2 = &num2; printf("\n num2 的值是: %d", *ptr2); printf("\n num2 的地址是: %x \n", ptr2); *ptr2 = *ptr1; printf("\n 重新赋值后 num2 的值是: %d", *ptr2); printf("\n 重新赋值后 num2 的地址是: %x\n", ptr2); }
C 语言程序设计知识点
主讲教师:杨剑
第 8 章:指针、结构体与预处理命令
1. 本章目标
理解指针的概念 定义指针变量 掌握对指针的操作 理解指针和数组的关系 理解结构体的概念和定义 理解预处理指令
2. 内存地址
内存是一个连续编址的空间,每一个存储单元都有一个固定的编号,称为内存地址。 内存地址通常用 16 进制数表示。
浅谈C语言中的指针变量

虽 然编 译 时会 分配 给指 针变 量? p一个 单元 ,P 的地 址 (a & )是 已指 定 了, 但 P的值 并 未指 定 ,在 P单元 中是 一个 不 可预 料 的值 ,它可 能指 向 内存 中空
白的存 储 区, 也可 能指 向已存放 指令 或 数据 的 内存段 , 因此在 向 P 指的 单 所
指 针 变 量 的使 用 十 分 灵活 ,在实 际 应用 中 ,我们 应 该注 意 以下几 个 问
题 :
变量 p i t i ( 值 即 i的地 址 )可 以 间接 访 问整 型变 量 i o n— 其 ,我 们 称指 针
变量 p n i oi t 。指 向整 型变 量 i。 下 面 从几 个 方面 讨 论 指针 变 量 的 使用 方 法 。
it p i n * o nt
—
4利用指向函数的指针变量用参数 , 增加了函数使用的夏活性 用 指 向函数 的指 针变 量 作形 参 ,实 际上是 将 实参 函数 的入 口地址 传给 指 针变 量 。例 如 ,用 指 向函 数 的指 针变 量 f n作 函数 p o e s的 形参 ,每 次 u rcs 调用 p o e s函 数时 , 实参 为不 同的 函数 名 ,则 形参 指针 变量 f n就指 向 rcs u
用 指针 变 量用 参 数 ,可 以将 实 参 指针 变 量 值传 递 给 形参 指 针 变 量 ( 即使 形 参 、实 参 指 针变 量 指 向 同一变 量 ) ,在 被 调 用 函 数执 行 过 程 中 , 形 参指 针
变 量所 指 向 的变 量值 发 生 变化 ,函数 调 用 结束 后 ,这 些变 量 值 的 变化 依 然 保 留下 来 ,这样 就 实现 了 “ 调 用 函数 改 变 变量 的值 ,在 主 调 函数 中 使用 被 这 些 改 变 了 的 值 ” 的 目的 。
浅谈C语言中指针变量的定义与应用

中 国 管 理 信 息 化
Chn n g m e t no main z t n i aMa a e n f r to iai I o
Fb,00 e .2 1
Vo .3. 4 11 No.
第l 3卷第 4 期
浅谈 C语言中指针变量的定义与应用
王 冉, 陶秋 红
( 石家庄职 工大学 , 石家庄 0 0 4 ) 5 0 1
[ 要] 摘 指针是 C ; .- a- ,x f 的重要 内容, 而灵活地使用它, . - 正确 可以帮助我们解决许 多实际问题 。本文介绍 了 指针变量 的定义与指针运算符 , 并且通过例题讲 解复杂指针的应用, 以使读者进一步理解、 掌握。
的培养 , 就是‘ 这 模式 中的“” l。
[ ]赵 志群 . 工 学结 合 课 程 的认 识( [] 职教 论 坛 ,0 84 . 2 对 二)J . 20() [] 大源. 3姜 职业 教 育 :职业 培 训 与 教育 辩 ]. 中国 职业 技 术 教 育 ,
2 0 () 0 84.
一
、
三、 针的应用 指
[ 收稿 日期 ] 0 — 3 3 2 90— 1 0 [ 作者简介 ] 陶秋 ̄(90 ) 17 - , 河北保定人 , 石家庄职工大学讲师, 主要
研 究方 向: 算机应 用。 计
一
1简单 的指向变量 的指针 和指 向指针 的指针 . () 1简单 的指 向变量 的指针 。 般形式 : 据类型标识 符 指 针变量 名: 数
从 图 2可 以看 出 . 整个课 程体 系 的核 心是构 建 4个 平 开发层 面 , 然 它是 指导 和实施 教学 的纲 领性 框 架 . 真 虽 但
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.1.3指针变量的定义
前面提到的存放地址的变量是一种特殊的变量,它只能用来存放地址而不能用来存放其他类型(例如整型、实型、字符型等)的数据,需专门定义。
“指针”表示指向关系,所谓指针就是地址。
一个变量的指针就是这个变量的地址,存放地址的变量称为指针变量。
例如:pa 是一个指针变量,pa 中存放的是整型变量a 的地址,也就是说pa 指向变量a。
变量a 的地址就是变量a 的指针,一个指针变量的内容一定是另一个变量在内存中的地址。
定义形式为:
数据类型说明符
*标识符;
例如:
int
*p;
表示定义了一个指针变量p,它指向一个整型变量,即p 存放一个整型变量的地址。
说明:
(1)“数据类型说明符”是指该指针变量所指向变量的类型;(2)“标识符”就是所定义的指针变量的名字;
(3)定义一个指针变量必须用符号“*”,它表明其后的变量是指针变量,但不要认为“*p”是指针变量,指针变量是p 而不是*p;
(4)指针可以指向任何类型的对象。
在定义了一个指针变量p 以后,系统为这个指针变量分配一个存储单元(一般为2个字节),用来存放地址。
要使一个指针变量指向某个变量,必须将该变量的地址赋给该指针变量。
例如:
int a,b;int
*p1,*p2;
p1=&a;p2=&b;
上述语句表示定义了两个整型变量a,b 和两个指针变量p1,p2,然后将a 的地址赋给p1,b 的地址赋给p2,这样p1指向变量a,
p2指向变量b。
6.1.4指针变量的引用
定义了一个指针变量后,可以对该指针变量进行各种操作,操作时用到两个有关指针的运算符:
(1)&:取地址运算符。
(2)*:指向运算符。
例如:&a 为变量a 的地址,*p 为指针变量p 所指向的变量。
【例6-1】定义指向整型变量的指针
/*程序名:6_1.c*/#include <stdio.h>
&a
&b
p1
a p2b
图6-3指针的指向
int main()
{
int a,b,*p1,*p2;
scanf("%d,%d",&a,&b);
p1=&a;/*p1指向a*/
p2=&b;/*p2指向b*/
printf("%d%d\n",*p1,*p2);
printf("%d%d\n",a,b);
return0;
}
程序运行如下:
3,6
36
36
可以看出,printf(“%d,%d\n”,*p1,*p2)和printf(“%d,%d\n”,a,b)两个语句作用相同。
*p1表示p1所指向的变量a,*p2表示p2所指向的变量b。
【例6-2】交换指针的指向
/*程序名:6_2.c*/
#include<stdio.h>
int main()
{
int a=5,b=8;
int*p1,*p2,*p;
p1=&a;
p2=&b;
printf("%d%d\n",*p1,*p2);
p=p1;p1=p2;p2=p;
printf("%d%d\n",*p1,*p2);
printf("%d%d\n",a,b);
return0;
}
程序运行结果如下:
58
85
58
程序执行过程可由图6-4所示:
p1a p2b &a5
&b8
(a)p1a p2b &b5
&a8
(b)
图6-4程序执行过程示意图
第一个printf语句执行时,p1和p2的指向如图6-4(a)所示,p1指向a,p2指向b;*p1就是a,*p2就是b。
在将p1和p2互换后的情况如图6-4(b)所示。
这时,p1指向b,p2指向a;*p1就是b,而不再是a;*p2就是a。
所以第二个printf语句执行后,输出结果为8,5。
程序中的指针变量p的作用是作为交换p1和p2的值所需要的临时变量,p也应定义为指针变量。
第三个printf语句执行后,分别输出a,b的值,从结果可以看出a,b 变量的值没有发生变化,和初始值一致。
【例6-3】交换指针所指向的变量值。
/*程序名:6_3.c*/
#include<stdio.h>
int main()
{
int a,b,temp;
int*p1,*p2;
a=5;b=8;
p1=&a;
p2=&b;
printf("%d%d\n",a,b);
temp=*p1;*p1=*p2;*p2=temp;
printf("%d%d\n",a,b);
return0;
}
程序运行结果如下:
58
85
程序执行过程可由图6-5所示
p1a p2b &a5
&b8
(a)p1a p2b &b8
&a5
(b)
图6-5程序执行过程示意图
p1和p2一直指向a和b,所以第一次调用printf()函数时,输出a和b的值,三个赋值语句执行以后,将a,b的值互换,如图6-5(b)所示。
交换地址和交换指针所指向变量的值是有本质区别的。