指 针 变 量
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如:上例中ptr1、ptr2只能指向整型变量,不 能指向实型或字符型变量。其“基类型” 相同,都是整型。
⑷定义指针变量后,并未确定该变量指向何处。 也就是说该变量的值是不确定的。在引用指针 变量前必须首先让它指向一个变量,这一点非 常重要。
首先介绍指针运算符(&,*)
“&”(地址运算符) :取变量的存储地址。 例如:&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个元素。
⑵指针与指针的加运算毫无意义,所以指针与指针 没有加运算。
⑶指针与指针的减运算要求相减的两个指针属于同 一类型,其结果是整数,表示两个指针之间的数 据的个数。其结果值的计算公式是:
⑵把指针变量的值赋给另一个指针变量。 如:int i,*pa,*pb; pa=&i ; pb=pa;
⑶给指针变量赋值为符号常量NULL。 如:int *pi ; pi=NULL ;
说明:NULL是一个空指针,表示该指针变量的值没 有意义。作用是为了避免对没有被初始化的指针变 量的非法引用。NULL 的定义在“stdio.h”中。
printf("a=%d,b=%d,max=%d,min=%d",a,b,*p1,*p2);
}
C语言程序设计
“*” (引用运算符) :是取指针所指向变量的内容 。
ptr指向了i变量,*ptr表示i的值,即3
说明:
⑴在定义指针变量时,可以立即将一个地址值 赋给指针变量,这就是指针变量的初始化。 指针变量的初始化也是指针的赋值运算。
如:float flt,*f_ptr=&flt; 注意:这不是给*f_ptr赋值 。
1.4 指针的算术运算
• 指针的加减运算(+、-)
• 指针的自加自减运算(++,--,+=,-=)
1.指针的+、-运算
+、-
说明:
指针±整数 指针-指针
⑴指针与整型值加减的结果是指针,表示使该指针 指向该指针下移或上移存储单元个数(整型值)之后 的内存地址。存储单元的大小就是该指针的数据类 型所需的内存大小。
*ptr=15 ; 等价于 i=15 ;
进一步理解“&”和“*”:
“&”运算和“*”运算是一对互逆运算。
&*ptr
&i
ptr
*&i
*ptr
i 等价于
1.3 指针变量赋值与初始化
ห้องสมุดไป่ตู้指针变量赋值后,指针变量就指向一个确定的内存存储单元。
使用指针的赋值运算(=)对指针变量赋值
⑴使用取地址运算符,把地址值赋值给指针变量。 如:int i, *pi ; pi=&i ;
3.指针的关系运算
基类型相同的两个指针进行比较运算,其 意义是两个指针的位置比较,结果是逻辑值。
指针运算的程序举例:把a,b按大小顺序输出。
main()
输出结果:
{
a=45,b=76,max=76,min=45
int *p1,*p2,*p,a,b;
a=45;b=76;
p1=&a; p2=&b;
if(*p1<*p2) {p=p1;p1=p2;p2=p;}
x 的值是3
2.指针的++、 --、+=、-= 运算 ++、 += :是移动指针到下一个或下几个存储单元。 --、 -= :是移动指针到上一个或上几个存储单元。
例如:int *ptr, ary[5]={2,4,6,8,10} ; ptr=ary; ptr+=3; ptr--;
想一想:*ptr++和(*ptr)++有什么 的区别 ?
⑴ 变量名ptr2前面的“*”不能省略,如果写成 int *ptr1, ptr2;
则ptr2被定义为整型变量,而非整型指针变量。
⑵定义中的“*”表示所定义的变量是指针变量,但 指针变量名是ptr1、ptr2,而非*ptr1、*ptr2。
⑶指针变量只能指向定义时所规定类型的变量。 这个规定的类型称为该指针变量的“基类型”。
⑷定义指针变量后,并未确定该变量指向何处。 也就是说该变量的值是不确定的。在引用指针 变量前必须首先让它指向一个变量,这一点非 常重要。
首先介绍指针运算符(&,*)
“&”(地址运算符) :取变量的存储地址。 例如:&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个元素。
⑵指针与指针的加运算毫无意义,所以指针与指针 没有加运算。
⑶指针与指针的减运算要求相减的两个指针属于同 一类型,其结果是整数,表示两个指针之间的数 据的个数。其结果值的计算公式是:
⑵把指针变量的值赋给另一个指针变量。 如:int i,*pa,*pb; pa=&i ; pb=pa;
⑶给指针变量赋值为符号常量NULL。 如:int *pi ; pi=NULL ;
说明:NULL是一个空指针,表示该指针变量的值没 有意义。作用是为了避免对没有被初始化的指针变 量的非法引用。NULL 的定义在“stdio.h”中。
printf("a=%d,b=%d,max=%d,min=%d",a,b,*p1,*p2);
}
C语言程序设计
“*” (引用运算符) :是取指针所指向变量的内容 。
ptr指向了i变量,*ptr表示i的值,即3
说明:
⑴在定义指针变量时,可以立即将一个地址值 赋给指针变量,这就是指针变量的初始化。 指针变量的初始化也是指针的赋值运算。
如:float flt,*f_ptr=&flt; 注意:这不是给*f_ptr赋值 。
1.4 指针的算术运算
• 指针的加减运算(+、-)
• 指针的自加自减运算(++,--,+=,-=)
1.指针的+、-运算
+、-
说明:
指针±整数 指针-指针
⑴指针与整型值加减的结果是指针,表示使该指针 指向该指针下移或上移存储单元个数(整型值)之后 的内存地址。存储单元的大小就是该指针的数据类 型所需的内存大小。
*ptr=15 ; 等价于 i=15 ;
进一步理解“&”和“*”:
“&”运算和“*”运算是一对互逆运算。
&*ptr
&i
ptr
*&i
*ptr
i 等价于
1.3 指针变量赋值与初始化
ห้องสมุดไป่ตู้指针变量赋值后,指针变量就指向一个确定的内存存储单元。
使用指针的赋值运算(=)对指针变量赋值
⑴使用取地址运算符,把地址值赋值给指针变量。 如:int i, *pi ; pi=&i ;
3.指针的关系运算
基类型相同的两个指针进行比较运算,其 意义是两个指针的位置比较,结果是逻辑值。
指针运算的程序举例:把a,b按大小顺序输出。
main()
输出结果:
{
a=45,b=76,max=76,min=45
int *p1,*p2,*p,a,b;
a=45;b=76;
p1=&a; p2=&b;
if(*p1<*p2) {p=p1;p1=p2;p2=p;}
x 的值是3
2.指针的++、 --、+=、-= 运算 ++、 += :是移动指针到下一个或下几个存储单元。 --、 -= :是移动指针到上一个或上几个存储单元。
例如:int *ptr, ary[5]={2,4,6,8,10} ; ptr=ary; ptr+=3; ptr--;
想一想:*ptr++和(*ptr)++有什么 的区别 ?
⑴ 变量名ptr2前面的“*”不能省略,如果写成 int *ptr1, ptr2;
则ptr2被定义为整型变量,而非整型指针变量。
⑵定义中的“*”表示所定义的变量是指针变量,但 指针变量名是ptr1、ptr2,而非*ptr1、*ptr2。
⑶指针变量只能指向定义时所规定类型的变量。 这个规定的类型称为该指针变量的“基类型”。