指针变量的类型及含义

合集下载

C语言教材第七章指针实验

C语言教材第七章指针实验

C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。

2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。

3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。

4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。

【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。

6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。

&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。

1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。

2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。

3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。

重修3

重修3

(3)p+1并非将p值简单加1个字节,而是加 p+1并非将p值简单加1个字节, 并非将 1*sizeof(基类型) 1*sizeof(基类型)个字节 基类型
• • • • • • •
下面程序的运行结果是( ) main() {char*s=”abcde”; s+=2; printf(“%s”,s); } A) 字符’c’的地址 B) 字符’c’ cde D) 无确定结果
student1= zhangsan ,1,20,88.8}; zhangsan”,1,20,88.8} } student1={“zhangsan ,1,20,88.8};
访问结构体成员 C语言规定两种运算符可用于访问结构体成员: 语言规定两种运算符可用于访问结构体成员: 一种是成员运算符,也称圆点“ 运算符 运算符; 一种是成员运算符,也称圆点“.”运算符; 圆点 一种是指向运算符,也称箭头运算符“ 一种是指向运算符,也称箭头运算符“->” 箭头运算符 使用方式: 使用方式: (1)定义为结构体类型的普通变量,访问其成员 定义为结构体类型的普通变量, 普通变量 用圆点运算符 (2)定义为指向结构体的指针变量,用箭头运算 定义为指向结构体的指针变量, 指针变量 符访问其指向的结构体成员
7.1 指 针 概 述
一、指针的概念 1. 什么是变量的地址,什么是变量的内容 什么是变量的地址, 变量的地址: 变量的地址:变量在内存中所占存储空间 的首地址。 的首地址。 变量的内容: 变量的内容:变量在内存的存储单元中存 放的数据。 放的数据。 变量没赋初值时,它的内容是随机的、 变量没赋初值时,它的内容是随机的、不 确定的。 确定的。
定义了一个指向整型数据的指针变量p 定义了一个指向整型数据的指针变量p,即p是 一个存放整型变量的地址的变量。 一个存放整型变量的地址的变量。 变量的指针,其含义是指该变量的地址 变量的指针,其含义是指该变量的地址

指针变量的定义与引用

指针变量的定义与引用

指针变量的初始化
在定义指针变量时同时给该变量一个初始值, 在定义指针变量时同时给该变量一个初始值,称为 指针变量初始化。 指针变量初始化。 例如: 例如: int a=20; int *pa; pa=&a;(&为取地址符) ( 为取地址符 为取地址符)
指针变量的几点说明
(1)指针变量名前的“*”表示该变量为指针变量,而指针 )指针变量名前的“ ”表示该变量为指针变量, 变量名不包含该“ ” 变量名不包含该“*”。 (2)一个指针变量只能指向同一类型的变量。 )一个指针变量只能指向同一类型的变量。 (3)指针变量中只能存放地址,而不能将数值型数据赋给 )指针变量中只能存放地址, 指针变量。 指针变量。 (4)只有当指针变量中具有确定地址后才能被引用。 )只有当指针变量中具有确定地址后才能被引用。
指针变量的引用
对指针变量的引用包含两个方面: 对指针变量的引用包含两个方面:一是对指针变量 本身的引用,如对指针变量进行各种运算; 本身的引用,如对指针变量进行各种运算;二是利用指 针变量来访问所指向的目标,对指针的间接引用。 针变量来访问所指向的目标,对指针的间接引用。 与指针相关的两个运算符: 与指针相关的两个运算符: (1)&:取地址运算符 ) 取地址运算符 (2)*:指针运算符,取其指向的内容 ) :指针运算符, 指针指向的对象可以表示成如下形式: *指针变量 指针指向的对象可以表示成如下形式: *指针变量 特别要注意的是,此处*是访问指针所指向变量的运算 特别要注意的是,此处 是访问指针所指向变量的运算 与指针定义时的*不同 在定义指针变量时, 不同。 符,与指针定义时的 不同。在定义指针变量时,* 号表 示其后是指针变量。在其它位置出现, 号是运算符。 示其后是指针变量。在其它位置出现,* 号是运算符。 如果与其联系的操作数是指针类型, 是间接访问 引用) 是间接访问(引用 如果与其联系的操作数是指针类型,*是间接访问 引用 运算符;如果与其联系的操作数是基本类型, 运算符;如果与其联系的操作数是基本类型, *是乘法运算符。在使用和阅读程序时要严格 是乘法运算符。 是乘法运算符 区分* 号的含义。 区分 号的含义。

《C语言程序设计》第8章指针

《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语言的指针和结构体

C语言的指针和结构体

– 如果分配成功,原存储块的内容就可能改变了,因此不
允许再通过ptr去使用它精选。课件ppt
17
结构体
精选课件ppt
18
结构体的定义
• 结构体类型定义的一般形式为:
struct 结构名 {
//关键字struct和它后
类型名
结构成员名1;
面的结构名一起组成 一个新的数据类型名
类型名 结构成员名2;
所需要的存储空间。 (3)使指针指向获得的内存空间,以便用指
针在该空间内实施运算或操作。 (4)当使用完毕内存后,释放这一空间。
精选课件ppt
13
动态存储分配函数malloc()
void *malloc(unsigned size)
在内存的动态存储区中分配一连续空间,其长度为 size
– 若申请成功,则返回一个指向所分配内存空间的起 始地址的指针
& : 取地址运算符,给出变量的地址。
int *p, a = 3;
p = &a; 把 a 的地址赋给 p,即 p 指向 a
p
a
&a
3
*p
//指针变量的类型和它所指向变量的类型相同
* :间接访问运算符,访问指针所指向的变量。
*p:指针变量 p 所指精向选课的件p变pt 量。
4
p
a
说明 int a = 3, *p;
};
name ↓
Zhang
age ↓
26
telephone ↓
精选课件ppt
23
结构体变量成员的使用
结构体变量名 .成员名
friend1.age = 26; strcpy(, "Zhang San"); strcpy(friend1.addr.zip, " 210044 ");

举例说明指针变量的使用方法及其基类型

举例说明指针变量的使用方法及其基类型

举例说明指针变量的使用方法及其基类型指针变量是一种特殊的变量,它存储着指向其他变量的内存位置,它与其他类型的变量不同,比如整型变量、字符串变量等,它们仅仅存储一个固定的值。

指针的基础是变量的地址,它以某种方式表示存储位置。

指针是一种工具,可以用来操作变量。

指针变量可以节约内存空间,特别是当程序的变量数量较多时,指针就显得尤为重要了。

指针变量可以分为两种:指针类型和非指针类型。

指针类型是指指针变量能够指向其他变量,数据类型必须是相同的,比如int *指向int类型的变量,char *指向char类型的变量等。

非指针类型指的是在某一特定的时间段内,指针变量只能指向一个特定的变量,如int类型的变量只能指向int类型的变量,但它可以切换,以指向不同类型的变量。

指针变量是一种特殊的变量,它可以指向任何变量,但它指向的类型必须兼容,否则就会出现类型不兼容错误。

指针变量一般有三种类型:空指针、通用指针和常量指针。

空指针是指在某一特定的时间段内,指针变量没有指向任何变量;通用指针是指指针变量可以指向任何类型的变量;常量指针是指指针变量只能指向常量。

指针变量的使用方法主要有两种:指针变量的定义和指针变量的赋值。

首先,要定义一个指针变量,可以使用以下语法:变量类型 *指针变量名称; 例如:int *p;中,int是变量的类型,*p指针变量的名称。

接着,需要为指针变量赋值,使用以下语法:指针变量名称= &变量名; 例如:int num = 5; int *p = & num;表示把变量 num地址赋值给指针变量 p。

最后,使用指针变量来访问变量,使用以下语法:*指针变量名称; 例如:int *p; int num = 5; *p = & num; int x = *p;样,就可以使用指针变量来访问变量了。

总之,指针变量是一种特殊的变量,它可以存储另外一个变量的内存地址,它可以用来操作变量,也可以节约内存空间,而且可以分为空指针、通用指针和常量指针。

浅谈C语言中指针变量的定义与应用

浅谈C语言中指针变量的定义与应用
it ,,; n P ij -1 p &i _;= ; j ; =p 这 里 P为 一 个 指针 变 量 , 存 变 量 i 保 的地 址 ; 而变 量 i 取 P所 指 是 单 元 的内 容 ( 即 p, 以经 过 上 述程 序 段 后 j 值为 1 )所 的 。
mi0 an { h r s口 {ac ttg ” i l} p ,c1 c a }c = ¨bdte h ,j ” ;/ l f ”k , I s 为指 针 数 组 并 初 始化 ;
维普资讯
科技信息
0计算机 与信息技术0
S IN E E H O O YIF R A I N CE C &T C N L G N O M TO
20 年 07
第 2 期 7
浅谈 C I 中指针变量的定义与应用 , 五 N口
王征风 孙 中桥 贾 先 ( 安 思 源 职 业 学 院 陕 西 西 安 7 0 3 ) 西 1 0 8
i ti n ;
it , , i, p)(P (; n i p O,f(, O) P f it [] a[](p ) ] a [O; n 5, p5, a[ ,(fp] a 5 ) 1 . 2指针 运 算 ( ) 术 运 算 1算 含 义 : 于地 址 的运 算 , 能 进 行 整 型 数据 的加 、 运 算 。 对 只 减 规 则 : 针 变 量 p n表 示 将 指 针 指 向 的 当 前 位 置 向 前 或 向后 移 动 指 +
#i c u n l de< t i . > sd o h
it ,,; = ; = p n P ij x 1 y ; 则 由 于 P没 有 指 向 具 体 的 单 元 . 因 此 输 出 Y时 将 得 到 一 个 随机 数。
定 an { h r [ ]{A C ”” F H”” KL , O ”” S U” p5; ca 5J = t B D , G ,I ”” aJ 5 t E J MN P ,R T } a 【 , ]

c语言第10章指针

c语言第10章指针

3.间接引用指针
间接引用指针时,可获得由该指针变量所指向的变量内容。
例如,int i=10,*ip=&i;
ip
i
cout<<*ip<<endl;
0000:F384 0000:F384 210
运行结果为:10 即指针ip所指向的变量i的内容。
*放在定义过的指针变量之前,称为间接引用操作符; *放在指针变量定义中时,称为指针定义符。 非指针变量不能用间接引用操作符,*只能作用于地址。
例如, double d=1.23,*dp; char c,*cp;
在&和cp*=作&d用; 下,对变量d和dp有如下6种操作: 其d,中d,dpp,=*&d*是cd; ,非*法dp的,;&&d指,dp针&是只d指p能。针指的向地与址其即同二类级型指的针量。 另外,指针除了可指向所有基本类型的变量外,指针也可 指向常量、数组、数组元素、函数、指针以及文件等。
int ii=n1t0;b, a[10]; int *inpt=&*pi;1,//*初p2始; 化为整型变量的地址,但 *ip=p&1=i;&//是b;错误的
注意:p2不=p要1将; “//可in以t *将ip=一&个i;”已与赋“值*i的p=指&i针;”混赋淆给。另一个相同类型的指针 前者是p2定=&义a语[5句];,*是指针定义符,系统为指针变量ip分配一个空间, 并2、用i数的地组址的值地初址始值化;可后用者该是数执组行语的句数,组左名右表两边示类。型例不如匹:配。 指 例3、针如变,ip函n=d*d量t数bodob;up在u的b=b[3使ll6ee].地8[用*d;4d=址]前/p2,/!(;.,*5值;p一)由[定4该]要; 函被数$赋$$以的d$:p一$名$个$字$地来址表值$$$,示$:否$。$$则$例是如很#6某#:危.#8变险量的。 没有被do赋ub值le的s指in针(d变ou量bdlep的x值);是一个随机地址,把6.8赋给内存中的 随机位do置ub,le很(可*p能f)破( 坏); 了另一个变量,甚至修改了栈中的函数返回 地址,pf造=s成in计; 算机死机或进入死循环。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
整型变量i 定义p为指向整型数据的指针变量 定义整型数组a,它有5个元素 定义指针数组p,它由4个指向整型数据的指针元素组成 p为指向包含4个元素的一维数组的指针变量 f为返回整型函数值的函数 p为指向一个指针的函数,该指针指向整型数据 p为指向函数的指针,该函数返回一个整型值 p是一个指针变量,它指向一个整型数据的指针变量 p是一个指针变量,基类型为void(空类型),不指向具体的对象
指针变量的类型及含义 变量定义 int i; int *p; int a[5]; int *p[4]; int (*p)[4]; int f(); int *p(); int (*p)(); int **p; void *p; 类型表示 int int * int [5] int *[4] int (*)[4] int () int *() int (*)() int ** void *
相关文档
最新文档