chap8(指针)

合集下载

第八章 指针

第八章 指针

#include <stdio.h>
void main()
{char a[]="Tsinghua University",b[30];
int i,j;
for (i=0;*(a+i)!='\0';i++)
*(b+i)=*(a+i); *(b+i)='\0';
//逐个字符复制 //加截止符
printf("String a is:%s\n",a);
变量地址作初值时, 该变量在此之前已 说明过,且类型应 一致。可用已赋初 值的指针去初始化 其他指针变量
定义: 例:int i;
int *i_pointer;
引用: i=3 *i_pointer=3 &i_pointer=3010 i_pointer=2000
内存用户数据区
2000 2002
3010
a[0]:第0行第0列元素的地址,即&a[0][0] a[1]:第1行第零列元素的地址,即&a[1][0] a[2]:第2行第零列元素的地址,即&a[2][0] a[0]+1:第0行第1列地址是&a[0][1] a[1]+2:第1行第2列地址是&a[1][2]
a[1]+2=> *(a+1)+2=> &a[1][2] ----不能写成*(a+1+2)
【例】使用指针将两个整数交换顺序
#include "stdio.h"
在引入指针运
main()
算后,数据交
{ int m,n,*pm,*pn,temp; 换可通过指针

【C语言】第八章 指针5

【C语言】第八章 指针5
பைடு நூலகம்
int fun(int x,int y,int (*p)(int,int)) { int resout; 输入的选项为2时 resout=(*p)(x,y); printf(“%d\n”,resout); 相当于min(x,y) } int max(int x,int y) { int z; if(x>y) z=x; else z=y; printf("max=" ); return(z); }
int fun(int x,int y,int (*p)(int,int)) { int result; 输入的选项为3时 result=(*p)(x,y); printf(“%d\n”,result); 相当于add(x,y) } int max(int x,int y) { int z; if(x>y) z=x; else z=y; printf("max=" ); return(z); }
例8.27 将若干字符串按字母顺序(由小 到大)输出。
"Follow" "Computer"
"FORTRAN"
"Great"
要考虑的问题: 1.数据的存储方式(普通变 量,数组,常量) 2.排序算法
1.普通变量 char s1,s2…; s1=‘F’;s2=‘o’ …… 2.一维数组 char s1[]={“Follow”}; char s2[]={“Computer”};s3=…;s4=…; 3.二维数组 char s1[][7]={“Follow”,“Great”,“FORTRAN”,“Computer”} 4.常量存储字符串+4个指向字符串的指针变量 char *p1=“Follow”;*p2=“Great”;*p3=…,*p4…; 5.常量存储字符串+一个指向字符串的指针数组 char *p[]={“Follow”,“Great”,“FORTRAN”,“Computer”}

第八章 指针

第八章 指针

第八章指针教学时间:8学时教学目的:1、掌握指针的概念2、熟练掌握指针的应用3、掌握字符数组的定义和引用内容、重点、难点:内容:8.1 指针的概念8.2 变量与指针8.3 数组与指针8.4 字符串与指针重点:1、掌握指针的概念2、掌握用指针编程难点:1、指针的运算2、指针数组的应用注:教案尾页有小结和作业第8 章指针指针是C语言的一种数据类型,在C语言中处于重要的地位。

正确、灵活地应用指针可以有效地表示复杂的数据结构;能动态分配内存;能方便地使用字符串;方便高效地使用数组。

熟练地应用指针可以使C程序简洁、紧凑、应用效果好。

8.1 指针的概念一个变量的地址称为该变量的指针。

8.2 变量与指针一、指针变量的定义定义指针的一般形式为基类型*指针变量名例如:int *p1; (定义p1为指向整型变量的指针变量)char *p2; (定义p2为指向字符型变量的指针变量)float *p3; (定义p3为指向实型变量的指针变量)int、char、float分别称为指针变量p1、p2、p3的“基类型”,“基类型”意为指针变量所指变量的类型,不是指针变量的类型。

二、指针变量的赋值可以使用不同的方法给一个指针变量赋值。

1.通过取地址运算符(&)获得地址值单目运算符(&)用来求出运算对象的地址,利用它可以把一个变量的地址赋给指针变量。

例如有如下定义和赋值:int a=5, *p, *q;p=&a;它建立了如图所示的逻辑关系p →a&a5因此当有语句:p=&a; 时,scanf((″%d″,&a);和scanf(″%d″,p)是等价的。

2.通过指针变量获得地址值可以通过赋值运算,把一个指针变量中的地址值赋给另一个指针变量,从而使这两个指针变量指向同一地址。

例如,若有上面的定义,则语句:q=p;使指针变量q中也存放了变量a的地址,也就是说指针变量p和q都指向了整型变量a。

第8章 指针

第8章 指针
• • • • 指向变量的指针变量 指向数组的指针 指向函数的指针 指针知识扩展
8.1 指 针 概 述
指针是C语言中广泛使用的一种数据类型,它极大地丰富 了C语言的功能。巧妙而恰当地使用指针,可以使程序简洁、 提高运行效率。同时,指针也是C语言中最难掌握的一部分, 在学习中除了要正确理解基本概念,还必须要多编程并上机 调试。
p2为指向指针的指针变量
8.6 程 序 举 例
【例】编写一个报数程序。有n个人围成一圈,顺序排号。 从第一个人开始报数(从1到3报数),凡是报到3的人退出 圈子,最后留下的是原来的几号。
分析
由于本题要求报数到3后就从头开始,所以可设一个if语句, 当为3时,就重新编号,所以需要从第一个元素开始排号, 到3就从0开始重新排号,所以排号循环不能超过最大数。
2.用字符串指针指向一个字符串。 char *string=” C Language”; printf("%s\n",string); 【说明】C语言对字符串常量是按字符数组来处理的,即在 内存开辟了一个字符数组来存放该字符串常量。而string 是一个字符类型的指针变量,在定义的同时,把一个字符 串的首地址(即存放字符串的字符数组的首地址)赋值给 它。
② 指针法,即采用*(a+i)或*(p+i)形式。 【例8.4】输出数组所有元素的值。 【程序代码】 #include <stdio.h> void main() { int a[5]={0,1,2,3,4},i,*p; p=a; for(i=0;i<5;i++) printf("a[%d]=%d\n",i,*(p+i)); }
2.指针变量的引用
指针变量同普通变量一样,使用之前必须要先定义,并且 赋值。未经赋值的指针变量不能使用。为指针变量赋值只能 赋予一个地址值,而不允许是其它类型的数据,否则将引起 错误。在C语言中,变量的地址是由编译系统分配的。 两个有关指针的运算符: (1)&:取地址运算符。 (2)*:取内容运算符(又称“指 向运算符”)。

chapter8c 语言

chapter8c 语言

struct_ptr p ;
④、成员与变量
成员本身实质上是变量,有地址空间。但引用时与一般变量不一 样,引用成员要受结构体变量的限制。成员不能独立存在,引用时在成 员变量之前加上结构体变量名和成员引用运算符“.”。故即使成员名与 一般变量同名,也不是一个对象。 成员和变量可以同名;
结构体标记和成员可以同名;和变量可以同名;
2、说明:
①、类型与变量: 变量定义要分配空间,而类型定义不会;故可以引用变 量,而不能引用类型。
②、结构体变量在内存中的存放:
所有成员在内存中依次连续存放,一个紧挨一个,整个 结构体变量需占内存总数等于所有成员分别占用内存空间的总 和。
d1:2B
year
2B
month
2B
day
2B
1B
1B
1B
1B
{ int i , j; double d ; } a ,a1={1,2,3.3};
struct B { int i , j ; double d ;} b ;
则:a=a1;//
a =b;//
a .i=b.i ; a.j=b.j; a.d =b.d ;//
成员的引用: 结构体变量名 . 成员名
2、引用数组元素的具体成员
pe[1].name pe[1].age
若某个成员又是一个结构体类型的数据,则层层深入,直至具体数据类 型。 3、引用数组元素和成员的地址 &pe[1].age &pe[1] pe
“ . ”运算符的优先级确保结构体成员引用可以不用圆括号
a1 .i =100 int m =a1.j ; 2、成员的数据类型为嵌套的结构类型: (a1 .i )=100
不能对此成员进行整体赋值和引用,只能对该成员(某个结构体类型)的

c8指针(C语言)

c8指针(C语言)

【例8.8】用函数实现求10个学生成绩的最高 分、最低分和平均分。
#include "stdio.h" float fun(int x[],int *p1,int *p2) { int i; float s=0; for(i=0;i<10;i++) {s=s+x[i]; if(*p1<x[i]) *p1=x[i]; else if(*p2>x[i]) *p2=x[i]; } return s/10;} void main() { int i,a[10],max,min; float ave; for(i=0;i<10;i++) { scanf("%d",&a[i]); printf("%4d",a[i]); } max=min=a[0]; ave=fun(a,&max,&min); printf("\nave=%6.2f,max=%d,min=%d",ave,max,min); }
函数需要多个返回值: return语句(1个); 数组名作参数; 指针作参数; 全局变量。
void add(int *x,int *y,int *sum) { *sum=*x+*y; } void main() { int a,b,s; scanf("%d%d",&a,&b); add(&a,&b,&s); printf("s=%d \n",s); }
2000 2002 2004 3010
指针类型变量: 存放变量的地址
3 6 4 3 2000
变量 i 变量 s 变量 k 变量 p

C语言第8章 指针

数据类型 *函数名(形参表) { 函数体; }
例8-13 求最长字符串。
函数的返回值为指针,指针数组作函数参数。
8.5.2 执行函数的指针变量(P207)
P207 自学
8.6 指针应用举例 (P208)
P208 自学
8.7 动态内存管理 (P214)
动态分配存储空间
malloc( )函数 calloc( ) 函数
2. 变量地址示意图
变量 b 的地址:XXXX 变量b 4字节
例: float b; char c;
变量 c 的地址:XXXX 数组 a 的地址:XXXX
变量c 1字节
int a[2];
数组a 8字节
变量的地址示意图
8.1.1 指针和指针变量(P185)
指针
变量的存储地址称为该变量的指针。
指针变量
for (i=0;i<4;i++)
p[i]=&a[i*3]; printf ("%d\n",p[3][2]);
8.4 指针作为函数的参数 (P199)
指针变量 ① 形参是指针变量,对应实参是 变量地址 数组名 指针变量 ② 形参是数组名,对应实参是 变量的地址 数组名
8.4.1 指针作参数示例
例8-10 两数交换。形参为指针变量,实参为变量
char *p="abcd";
读下列程序段,分析输出结果
(1)
char s[]="ABCD";
char *p; for (p=s; p<s+4; p++) printf("%s\n",p);
读下列程序段,分析输出结果

chap8 高等职业技术教育实践教学基地的评估

第八章高等职业技术教育实践教学基地的评估教学评估是按照一定的目标和标准,运用一定的途径和方法对教育现象所进行的一种价值判断。

高职教育实践教学基地评估则是根据高职教育人才培养目标和实践教学基地建设的标准,对高职院校校内外实践教学基地的建设与规划、体制与功能、管理与运行、教学与成效以及基地特色等方面的情况所进行的综合性的评估。

随着社会主义市场经济的发展和高校办学自主权的逐步扩大,教育评估日益成为教育行政主管部门对高等学校进行宏观管理和监控的重要手段。

那么,高职教育实践教学基地要不要进行评估,为什么要进行评估?依据什么样的标准来进行评估?如何组织和实施评估?这就是本章所要研究的问题。

第一节实践教学基地的评估指标体系和评估标准的制定一、评估指标体系与评估标准的内涵(一)评估指标的内涵及特征指标一般是指计划中规定达到的目标。

人类的任何活动都是有一定目标的,高职实践教学基地建设也不例外。

如培养学生的技术应用能力和技术创新能力,提高学生的职业素质,提高实践教学的质量,充分发挥基地的各项功能和作用等等,就是实践教学基地建设的目标。

这些目标也是实践教学基地评估的目标。

但是这些目标通常都是抽象的,原则性的,概括性的,无法通过测试及分析直接对它进行评价、判断。

为了能通过测试及分析对实践教学基地建设的价值进行判断,还必须将这些原则性的、概括性的、抽象的评估目标,逐级分解成为具体的。

可直接测试的分目标,这就是指标1。

从其定义看,指标实质是目标逐级分解出来的具体化的、可直接测试的分目标,是评价目标的转化,也就是它的评价内容或评估项目。

它主要解决的实际上是一个评什么的问题。

指标具有如下特征:1.制约性指标是由目标分解出来的,因此它要受目标的制约,即不能把不是由目标分解出来的任意一项特征或属性拿来作为评估的指标。

如实践教学基地评估可以把实践教学基地的体制与功能、基地的条件、基地的管理、实践教学情况等作为一级指标,因为它们都是由实践教学基地建设水平这一目标分解出来的,受这一目标的制约。

chap8-SQL SERVER 数据库系统管理


北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-03
08-39
8.4.6数据库维护计划(续)
北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-03
08-40
8.4.6数据库维护计划(续)
北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-03
08-41
8.5数据库的备份
WS-NE30-3-03
08-8
8.4 数据库管理
• • • • • • 创建数据库 数据库属性 收缩数据库和数据库文件 删除数据库 移动数据库 数据库维护计划
北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-03
08-9
8.4.1创建数据库
• 在创建数据库之前,请考虑如下事项:
– 创建数据库的权限默认授予 sysadmin 和 dbcreator 固定 服务器角色的成员,但是它仍可以授予其他用户 – 创建数据库的用户将成为该数据库的所有者 – 在一个服务器上,最多可以创建 32,767 个数据库 – 数据库名称必须遵循标识符规则
分离数据库。 将数据库文件移到另一服务器或磁盘。 通过指定移动文件的新位置附加数据库。
北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-03
08-28
8.4.5 移动数据库(续)-分离
北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-03
08-29
8.4.5 移动数据库(续)-附加数据库
北京清华万博网络技术股份有限公司版权所有
WS-NE30-3-03
08-5
8.3数据库设计及规划(续)
在设计数据库时,应考虑以下事项: • 数据库的用途及该用途将如何影响设计。应创 建符合用途的数据库计划 • 数据库规范化规则,防止数据库设计中出现错 误 • 对数据完整性的保护 • 数据库和用户权限的安全要求 • 应用程序的性能需求 • 维护 • 估计数据库大小

第八章: 指针

第八章 指针 DeathBirthLifeStudydt

1

前言 C++这门编程语言对程序员非常的信任,因此赋予了指针无比强大的功能,通过指针程序员可以直接对内存进行操作,这样的优点是使程序紧凑、简洁、高效;不过由于它的概念比较复杂使用起来又是非常的灵活,因此初学者常常容易犯错,本章将通过通俗的语言使读者轻松掌握指针并避免一些常见的错误。

第一节:什么是地址 什么是地址? 假如我们要去动物园,那么我们就得先知道动物园的地址,然后我们就可以通过该地址找到动物园。同理,计算机要找到变量i,必须先找到i的地址,也就是i在内存中的编号,然后通过该编号,计算机就可以访问到i了并且对它进行操作。我们人类询问别人,查阅地图等方式获得动物园的地址,那么计算机是如何知道并获得i的地址呢? 我们通过一个例子就可以知道计算机是如何获得变量i的地址:

说明:【&】是取址运算符符,它的作用是获得变量i在内存中的地址。取得了i的地址后,在通过cout语句将它输出到屏幕上。

第二节:用指针来保存地址 假如我们拥有一大批客户的地址,那么我们首要的第一件事就是用通讯录将他们统统记下来,同样,计算机也有保存地址地址的工具,那就是指针。因此,假如有人问你指针是什么?你可以这样回答他:指针就是用来保存内存地址的变量。 那指针是如何保存内存地址的:由于每个被定义的变量都有自己的地址,因此你完全可以使用指针来存放任何已被定义的标量的地址,即使它没有被赋值。

解释:【】定义了一个指针p,星号(*)是取值运算符,声明的变量是指针,即指针p,要注意这里它的类型也要是int。 注意:int *p并不意味着指针称为*p,这里指针称为p,*号告诉编译程序p是一个指针,但*不是变量名的一部分。 第八章 指针 DeathBirthLifeStudydt

2

该运行结果说明指针p所保存的内存地址就是变量i的地址。 第三节:空指针 我们知道指针就是用来保存内存地址的变量,因此我们定义一个指针后一定要用它来保存一个内存地址,假如我们不那么做,那么该指针就是一个失控指针,它可以指向任何地址,并且对该地址的数据进行修改或者删除后果是非常可怕的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

务必记住:*(a+i) 和 a[ i] 是等价的。
如果 a 是一维数组名,则a[ i]代表第 i+1个元素所占的 内存单元。但如果a是二维数组,则a[ i ]代表一维数组名, a[i]本身是不占用内存单元的, 也不存放元素值,而只是 一个地址。 a、a+i、a[ i]、*(a+i)、*(a+i)+j、a[ i]+j都是地址, 而*(a[ i]+j)、*(*(a+i)+j)是二维数组元素a[ i][ j]的值。
二、 字符串指针作函数参数
可以用地址传递的方式,即用字符数组名作 参数或用指向字符串的指针变量作参数,将一个 字符串从一个函数传递到另复制。 用字符数组作参数 void copy_string( from , to ) char from[ ] , to[ ] ; { int i = 0 ; while ( from[i] != „\0‟ ) { to[i] = from[i] ; i + + ; } to[i] = „\0‟ ; 运行结果: } string_a = I am a teacher. string_b = I am a teacher. main( ) {char a[ ] = “I am a teacher.” ; char b[ ] = “you are a student.” ; copy_string( a , b) ; printf( “string_a = %s\nstring_b = %s\n”,a,b); }
形参用字符指针变量 void copy_string(from , to) char *from , *to ; { for ( ; *from != „\0‟; from++; to++) *to = *from ; *to = „\0‟; } main( ) { char *a= “I am a teacher.”; char *b= “you are a student.”; copy_string(a,b); printf( “string_a = %s\nstring_b = %s\n”,a,b) ; }
8.2
指针的运算
++ --
8.2.1 指针的算术运算 主要为 + -
P++ 、 p— 分别表示向后、向前移一个单元。
P+n、p-n 分别表示向后、向前移n个单元。
8.2.2 指针的关系运算 主要为 == 、 !=两种。
当两个指针p1与p2指向同一地址时,p1==p2为真,
当两个指针p1与p2不指向同一地址时,p1!=p2为真。
可以通过指针引用数组元素
若p=a; 是将整型数组a的首地址赋给整型指针变量p,则*p=5; 是将整数5赋给a数组的第一个元素a[0],等价于a[0]=5 。 p+1表示指针变量p当前所指的数组元素的下一个元素。但p+1 不是p的值加 1 。若有p=&a[0]; 则p+i(或a+i)就是a[i]的地址(因 为a代表数组a的首地址)。 若有p=&a[0]; 则*(p+i)或*(a+i)就是p+i或a+i所指向的数组元 素,即a[i]。也就是说 *(p+i) = *(a+i) = a[i]。 指向数组的指针变量可以带下标,如:p[i] 与*( p+i)是等价的。
例8.2 main( ) {int *p1,*p2,*p,a,b; scanf(“%d,%d”,&a,&b); p1=&a; p2=&b; if (a<b) {p=p1; p1=p2; p2=p;} printf(“a=%d,b=%d\n”,a,b); printf(“max=%d,min=%d\n”,*p1,*p2); } 运行情况: 5,9 a=5,b=9 max=9,min=5 注意:此例中a和b并未交换,而p1和p2的值改变。
8.1.3 指针变量的引用
与指针有关的运算符: & 取地址运算符。 如:&a为变量a的地址。 *间接引用运算符。 如:*p为指针变量p所指向的变量。 ①指针变量p的内容为地址量;*p为指针p的目标量,内容为数据, 即指针变量p所指向的变量的值。 p=&i; 是将变量 i 的地址赋给指针变量p。 *p=j; 是将变量j的值赋给目标变量*p(即i)。 * 运算和& 运算互为逆运算。 &(*p)的结果为p,即变量*p的地址; *(&i)表示访问变量 i 的地址,其结果就是 i 本身。 ③ &p为指针变量p的地址。
例8.1 main( ) {int a,b; int *p1,*p2; a=100; b=10; p1=&a; p2=&b; / 将变量a和b的地址赋给指针变量p1和p2 / printf(“%d,%d\n”,a,b); printf(“%d,%d\n”,*p1,*p2); / *p1和*p2就是变量a和b / }
8.3 指针与数组 8.3.1 指向一维数组的指针
例:int a[10], *p; p=&a[0]; / 将a[0]元素的地址赋给指针变量p / 在C中,数组名代表数组的首地址。因此p=a ; 与p=&a[0];是等价的。 注:p=a; 是将a 数组的首地址赋给指针变量p。但这里的a 并不代 表整个数组。
例8.4 输出二维数组中任一行任一列的元素。 main( ) { static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4], i, j; p=a; scanf(“i=%d, j=%d”,&i, &j); printf(“a[%d,%d]=%d\n”, i, j,*(*(p+i)+j)); } 运行情况: i=1, j=2 /* 注意这里的输入格式 */ a[1,2]=13 程序中的“int (*p)[4]”表示p 是一个指向包含4个元素 的一维数组的指针变量,即p是一个行指针,指向一维 数组的首地址。由于运算符优先级的关系,这里的 (*p)[4]不能写成*p[4]。
运行结果: 100, 10 100, 10
说明: 若先执行p1=&a; 再执行&*p1; 是什 么意思? 这里“&”和“*”的优先级相 同,但按“自右至左”结合, 即&*p1与 &a相同。 而p2=&*p1; 的作用是将&a 赋给p2。 若先执行p1=&a; 则 *&a和*p1的 作用相同。即:*&a与a是等价的。 (*p1)++ 等价于a++。 注意:括号是必须的,否则就成 为*(p1++)。这时先按p1的原值 进行 * 运算得到a的值。然后使 p1的值改变,则p1不再指向a了。
8.3.3 字符串的指针 一、 字符串的表示形式 用字符数组实现 static char str[ ]=“I love China !”; str[i]表示字符数组中的第i+1个字符。如: str[8]为字 符‘h‟ 用字符指针实现 char *a=“I love China!”; 尽管没有定义为字符数组,但实际在内存开辟了一个 字符数组用来存放字符串常量。同样,a[8]为字符 ‘h‟。 注意: a不是字符串变量,只是将“I love China!”的首地址 赋给指针变量a 。
第8章 指针
8.1 指针概念
指针是C的一个重要概念。其特点是: 能有效地表示复杂的数据结构;能动态地分配内存,直接处 理内存地址;能方便、有效地使用字符串和数组;能在调用 函数后获得多个值。 C中定义的变量,在编译时按变量的类型来分配一定长度的内存 单元。在运行时,根据变量名与地址的对应关系,相应地存取变 量的数据。这种按变量地址存取变量值的方法称为“直接访问” 方式。 如果变量的地址也存放在某一个内存单元,则存取方式为先找到 存放变量的地址单元,再取变量的值,这种方式称为“间接访问” 方式。如: &i 可以获得变量 i 的地址; p=&i;将变量 i 的地址保存到p中; 依据p当然可以访问到i
8.3.2 指向多维数组的指针
设二维数组a定义如下: static int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; a 代表整个二维数组的首地址,也就是0行的首地址。a+1、 a+2分别代表1行和2行的首地址。同样,a[0]或&a[0][0]、a[1] 或&a[1][0]、a[2]或&a[2][0]也分别代表0行、1行、2行的首地 址。 a[0]等价于*(a+0)、a[1]等价于*(a+1), ,a[i]等价于*(a+i)。 因 此 , a[0]+1 和 * (a+0)+1 的 值 都 是 &a[0][1] ; a[1]+2 和 *(a+1)+2的值为&a[1][2]。 *(a+1)+2不能写成*(a+1+2),否则就变成*(a+3), 即a[3]。 因a[0]+1和*(a+0)+1是a[0][1]的地址,则*(a[0]+1)就是a[0][1] 的值, 同理,*(*(a+0)+1)或*(*a+1)是a[0][1]的值,*(a[ i ]+ j) 或*(*(a+i)+j )是a[ i ][ j]的值。
要注意指向数组的指针变量的当前值,因为指针可以 指向数组最后一个元素以后的内存单元。
要注意指针变量的运算。如果p指向数组a (即p=a), 则: p++(或p+=1)表示p指向下一个元素;*p表示取得当前 所指元素之值。 *p++等价于*(p++),相当于a[i++],表示先*p,再p+1p。 *p– –等价于*(p– –),相当于a[i– –],表示先*p,再p–1p。 *(++p) 相当于a[++i],表示p+1p,再*p。 *(––p) 相当于a[––i],表示p–1p,再*p。 (*p)++ 表示p所指之元素的值加1,不是指针值加1。 即a[i]+1。
相关文档
最新文档