C语言6-指针
C语言——指针

4. 结论: 若要使变量的值通过函数调用而发生改变, 则形参必须是指针型,实参为地址量(&<变量名>)
或指针型。
另:全局变量和数组名作为参数也可改变变量的值.
总 结
若要使n个变量的值通过函数调用而发生改变,则
在主调函数中设n个变量,用n个指针变量指向它们。 将这些指针变量作为实参,将其地址传递给被调函
p1 p &a p2 &b p1 &b p2 &a
a 5
b 9
a 5 b 9
}
5,9 9,5
三、指针变量作为函数参数 前面讲过:数值型变量作为函数实参 形参数据值的改变不会影响实参。 但当用地址(指针变量)作参数时,作用为传址, 与数组名类似。 要求:形参、实参均为地址量。
单向 传递
形参,于是,
例:实现10.2 swap(int *p1, int *p2) { int temp; temp=p1; p1=p2;p2= temp; } #include <stdio.h> void main( ) { int a, b;
它代表的是地址+1个单位
重要概念: 指针变量也有各种类型(如上面所示),但指针变 量的值只能是整型值。
二、指针变量的引用方式 *指针变量名----表示所指变量的值。 指针变量名----表示所指向变量的指针(地址)。
两个运算符号:
&: 取地址运算符。 &i *: 指针运算符,取其指向的内容(所指变 量的值)。 *p
9,0,10
10,9,0
§10.3 数组与指针
一个变量的地址为该变量的指针。当用一个变 量来存放地址(指针)时,该变量称为指针变量。
一个数组元素相当于一个简单变量。于是,亦 可用一个指针变量来指向数组元素。
C语言中指针的教学

- 一 . _
2 指针 类型 的声 明及 解读
臣 卜 _ -
图 1 指 针 示 意 图
回
要 正确有 效地 使用 指针 编 程 , 首先必 须要 弄清 指针 变量 与指 针指 向变 量 的区别 : 指针 变 量存 放 的是所 指 向变 量 的地址 ( 如上 图中 的 P 而指 针变 量所 指 向的变 量存 放 的则 是数据 ( ), 如上 图中的 i )。 指针 是 C语 言 的一种 数 据类 型 , 与一般 变量 的定 义完 全相 同, 标识符 即为指针 变 量名 。指针 的数据类 型 与指针 本 身并 没有 关系 , 仅表 示 它所 指 向的数据 类 型 。 在指针 教 学过程 中 , 生一 般对 指针 声 明的解读 也不 太 容易 掌握 , 以对 指针 声 明的解读 总 结 出一个 一 学 可
指针 /
it p ;. n * 0 / 定义 了P为指针 函数, 返回值为指向整型数据的指针 /
在 C语言 中 , 针类 型用 于 描述存 储 单元 的 “ 址 ” 是 C语 言 的教学 中不 可忽略 的 内容 。 指 地 , 同时 , 针 的 指 概念 也 不易理 解 , 习和 应 用 时有一 定 的 困难 , 学 本文 将 结合例 题对 此进 行 探讨 。 1 指针 的概 念 在 C语 言教 学 中, 首先 要 让学 生弄 清变量 所 具有 的两 方面 的数 据特 征 : 值与地 址 。如 果 在程 序 中定 义 了
20H、0 1 执行 s n( %d , i 将 i 00 2 0H, c f“ ”& ) a 时, 的值送 入地址 为 20 H、0 1 的存储单 元 中; 0 0 20H 而执行 pi f rt n ( %d ,时, 据变 量名 与地 址 的对应 关 系 , 到变 量 i “ ”i 根 ) 找 的地 址 20 H, 中读 取 i 00 从 的值 输 出 。这 种按 变 量地
C语言指针数组介绍定义指针数组输入输出指针数组

C语言指针数组介绍定义指针数组输入输出指针数组C语言中,指针数组是一种特殊的数组类型,其中数组的每个元素都是一个指针。
指针数组允许我们存储和操作一组指针,以及通过指针访问和操作内存中的数据。
本文将介绍指针数组的定义、输入输出和常见用途。
1.定义指针数组定义指针数组的语法如下:```数据类型*数组名[大小];```其中,`数据类型`是指针指向的数据类型,`数组名`是指针数组的名称,`大小`是指针数组的大小(即元素个数)。
举个例子,如果想定义一个包含5个整型指针的指针数组,可以这样做:```int *ptrArray[5];```这个定义表示`ptrArray`是一个包含5个整型指针的数组。
输入指针数组的常见方式是使用循环结构逐个为数组元素赋值,可以使用`scanf`函数进行输入。
```for (int i = 0; i < size; i++)scanf("%d", &ptrArray[i]);```输出指针数组的常见方式是使用循环结构逐个打印数组元素的值,可以使用`printf`函数进行输出。
```for (int i = 0; i < size; i++)printf("%d\n", *ptrArray[i]);```注意这里要使用`*`操作符来访问指针指向的值。
3.指针数组的常见用途指针数组在程序设计中具有广泛的应用。
下面是一些常见的用途:-字符串数组:可以通过定义一个指针数组来存储一组字符串,每个元素都是一个指向字符串的指针。
```char *stringArray[5] = {"Hello", "World", "C", "Language", "Pointer"};```-函数指针数组:可以使用指针数组来存储不同函数的指针,以便在运行时根据需要调用特定的函数。
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 ");
c语言指针详细讲解

c语言指针详细讲解
C 语言中指针是非常强大的概念,它允许程序直接访问内存中的数据。
指针在 C 语言中最初是被用于解决内存分配问题而提出的,随着 C 语言的发展,指针也变得愈发重要。
指针的本质是一个存储变量地址的变量。
在 C 语言中,指针通常用符号&来表示,例如&x 表示的是 x 变量的地址。
指针变量存储的是一个内存地址,当程序读取指针变量时,它会读取该地址中存储的数据。
C 语言中可以使用指针进行高效的内存操作。
例如,当程序需要对一个数组元素进行修改时,可以直接用指针修改该元素的值,而不必修改数组名本身。
另外,指针还可以用于动态分配内存,这是 C 语言中一个重要的特性。
指针的使用方法比较灵活,但也需要小心使用。
如果不小心处理指针,可能会导致未知的错误。
例如,当指针指向的内存空间被释放后,程序试图访问该内存空间时可能会导致未定义的行为。
因此,在C 语言中,指针的使用需要更加谨慎。
C 语言中指针是一个非常重要和强大的概念,掌握指针的使用方法可以让程序员写出更加高效和安全的代码。
第6章C语言

float
*point;
定义了一个指向浮点型数据的指针变量point,即point是一个 用于存放浮点型变量地址的变量。
6.1.2 指针变量的定义与初始化
在此定义中,基类型声明了该指针变量所指向的 实体的类型。如:一个指向float类型的指针变量,它 的基类型应该为float型;一个指向int类型的指针变 量,它的基类型应该为int型。“*”是一个标识,用 以说明该变量是一个具有指针类型的变量。对于指针 变量的变量名的命名也应该尽量做到“见名知义”。 需要注意的是,指针变量名为“point”,而非 “*point”。
第6章
指针
山东大学电气工程学院
第6章Байду номын сангаас指针
指针是C语言中一个非常重要的概念,它对于变量的引用、数组 的处理、字符串的操作、函数参数的调用及函数间数据的处理、 结构体的应用和文件的操作等等都起着相当重要的作用。正确的 运用指针不仅可以提高程序的执行效率,简化操作过程,而且可 以处理复杂的数据操作,实现动态的数据结构,完成形式多样的 参数传递以及灵活的修改形参与实参的数值。但是需要警惕的是, 因为指针的运用如此的灵活,以至于经常会出现一些意想不到的 错误和结果。甚至在某些情况下,错误的运用指针,会使程序受 到非常严重的破坏。因此可以说,正确的理解和运用指针是衡量 能否成功的编写高质量C程序的标准。
6.1.3 与指针有关的运算符
在C语言中有三个与指针有关的运算符: 1、“&”运算符 此运算符称为取地址运算符。通过取地址运算符“&”可以获得 一个变量的地址。“&”为单目运算符,运算方向为从右向左结合, 直接作用于一个变量前,表示该变量的地址。 例如: int x=10,*p1;
c语言中指针用法
1) 运算符 :*
该运算符作用在指针变量上,表示访问指针
变量所指向的数据对象编。辑课件
22
2)作用:
实现对指针所指向的数据对象的间接访问, 包括引用和赋值等基本运算。
例6-6 下面的程序段包含着对指针的间接访问。
int a,b=2,c,*p; …… p=&b; scanf("%d",&a); c=a+*p;
1.指针的赋值
操作指针之前必须赋予确定的值,可以在 定义指针的同时赋予初值,也可以用赋值表达 式对指针变量赋值。
(1)赋空值(NULL); (2)赋予某个变量的地址。 (3)将一个指针变量的值赋予另一指针变量。
例如:int grade,*p; 编辑课件
16
p=&grade;
2.指针的加减运算
1)运算符:+、-、++、-- 。
--:原地址减去一个地址单位(基类型的实际字 节数);
例如: int *iptr; …… iptr++;// iptr=iptr+1,向下移动两个字节 iptr--;// iptr=iptr-1,向上移动两个字节
下图给出指针的移动示编意辑课:件
19
3. 取地址运算
1) 运算符:& 2) 作用:获取数据对象的内存地址,如果是结 构数据对象则获取其内存首地址。
重点:
➢ 指针的概念 ➢ 指针运算; ➢ 内存操作函数和动态存储分配。
课堂时数:6—7学时 上机时数:2—3学时 课外上机时数:2—3学时
编辑课件
2
6.1 指针的概念
1. 什么叫指针
一个数据对象的内存地址称为该数据对象 的指针 。
《C语言》指针 ppt课件
ppt课件
14
p1 buf main
p bubfu+f105
p2 buf+10
aalllloocc
bbeeggiinn bubfu+f10 nn 150
ppt课件
1 buf[0]
2 buf[1]
:
:
9
:
\0 buf[9]
a buf[10]
:
:
\0 buf[14]
第6章 指针
6.1 指针定义与使用 6.2 指针与函数 6.3 指针与数组 6.4 指针与字符串 6.5 指针数组与多级指针 6.6 指针与动态内存分配 6.7 指针的深层应用
ppt课件
1
6.1 指针的引出
一. 地址与指针
1. 地址与取地址运算
C程序中的变量在内存中占有一个可标识的存储区,
d = *(++p) ; { ++p ; d = *p ; }
执行后 d 的值为 3 , *p 的值为 3
1010 23 a 5b 3c 3d
ppt课件
7
例6. 2
#include <stdio.h> void main( )
p1 &ba
5a
{ int *p1 , *p2 , *p , a , b ; scanf(“%d%d”, &a , &b);
p2 &ba
9b
p1 = &a ; p2 = &b ;
if (a<b) { p = p1 ; p1 = p2 ;
p &a
输出结果:
p2 = p ;
C指针详解(经典,非常详细)
总结课:让你不再害怕指针指针所具有的四个要素:指针的类型,指针所指向的类型,指针指向的内存区,指针自身占据的内存。
0前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:int p;//这是一个普通的整型变量int*p;//首先从P处开始,先与*结合,所以说明P是一//个指针,然后再与int结合,说明指针所指向//的内容的类型为int型.所以P是一个返回整//型数据的指针int p[3];//首先从P处开始,先与[]结合,说明P是一个数//组,然后与int结合,说明数组里的元素是整//型的,所以P是一个由整型数据组成的数组int*p[3];//首先从P处开始,先与[]结合,因为其优先级//比*高,所以P是一个数组,然后再与*结合,说明//数组里的元素是指针类型,然后再与int结合,//说明指针所指向的内容的类型是整型的,所以//P是一个由返回整型数据的指针所组成的数组int(*p)[3];//首先从P处开始,先与*结合,说明P是一个指针//然后再与[]结合(与"()"这步可以忽略,只是为//了改变优先级),说明指针所指向的内容是一个//数组,然后再与int 结合,说明数组里的元素是//整型的.所以P 是一个指向由整型数据组成的数//组的指针int**p;//首先从P开始,先与*结合,说是P是一个指针,然//后再与*结合,说明指针所指向的元素是指针,然//后再与int 结合,说明该指针所指向的元素是整//型数据.由于二级指针以及更高级的指针极少用//在复杂的类型中,所以后面更复杂的类型我们就//不考虑多级指针了,最多只考虑一级指针.int p(int);//从P处起,先与()结合,说明P是一个函数,然后进入//()里分析,说明该函数有一个整型变量的参数//然后再与外面的int结合,说明函数的返回值是//一个整型数据int(*p)(int);//从P处开始,先与指针结合,说明P是一个指针,然后与//()结合,说明指针指向的是一个函数,然后再与()里的//int结合,说明函数有一个int型的参数,再与最外层的//int结合,说明函数的返回类型是整型,所以P是一个指//向有一个整型参数且返回类型为整型的函数的指针int*(*p(int))[3];//可以先跳过,不看这个类型,过于复杂//从P开始,先与()结合,说明P是一个函数,然后进//入()里面,与int结合,说明函数有一个整型变量//参数,然后再与外面的*结合,说明函数返回的是//一个指针,,然后到最外面一层,先与[]结合,说明//返回的指针指向的是一个数组,然后再与*结合,说//明数组里的元素是指针,然后再与int结合,说明指//针指向的内容是整型数据.所以P是一个参数为一个//整数据且返回一个指向由整型指针变量组成的数组//的指针变量的函数.说到这里也就差不多了,我们的任务也就这么多,理解了这几个类型,其它的类型对我们来说也是小菜了,不过我们一般不会用太复杂的类型,那样会大大减小程序的可读性,请慎用,这上面的几种类型已经足够我们用了.1、细说指针指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。
C语言--指针
值传递
运行结果:5, 9
27
例 将数从大到小输出 swap(int *p1, int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } main() COPY { int a,b; int *pointer_1,*pointer_2; scanf("%d,%d",&a,&b); pointer_1=&a; pointer_2=&b; if(a<b)swap(pointer_1,pointer_2); printf("\n%d,%d\n",a,b); }
19
初始:
a p
?
3 :
0x2000
?
执行:*p=a
a
3 : 3
0x2000
p
?
?
20
初始:
a p
?
3 :
0x2000
?
执行:p=&a
a
3 :
0x2000
p
0X2000
21
指针变量作为函数参数
当指针变量作为函数参数时,传递的是变量的地址。读 以下程序: void testpoint(int *p) { int t; t=*p; t++; } void main() { int a=3,* p; p=&a; printf(“a=%d\n”,a); testpoint(p); printf(“a=%d\n”,a); }
22
t
3 :
0x6000
p
&amp;a
指针算术运算
使用递增/递减运算符(++ 和 --)将指针递增或 内存 递减
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指针变量的引用和运算
指针的赋值运算
• 将一个变量的地址以&运算的结果形式赋给一个同类型的指 针 int a,*pa; pa=&a; • 将另一同类型的指针值赋给某一指针,如: char c,*s1=&c,*s2; s2=s1; • 将地址常量如数组名赋给同类型的指针,如: 但不能给数组名赋值? char *str,ch[80]; str=ch; • 同类型指针算术运算的结果,如果还是地址的话,可以赋 值给同类型的指针 int *p1,*p2,a[20]; p1=a; p2=p1+5; p1=p2-3; p1+=2; p2-=10;
如图,指针p、q和数组a数据类型相同。假 定p、q分别指向数组元素a[1]、a[6],则q-p 结果为5。 main() { int *p,*q; int a[30]; p=&a[1];q=&a[6]; printf(“p=%u q=%u q-p=%u \n”,p,q,q-p); }
p
1000 1002 1004 1006 1008 1010 1012 1014
指针提供了一种通过地址间接地存取目标 的方法(间址运算),指针可以指向各种基 本数据类型变量,也可指向各种复杂的扩展 数据类型变量和函数。 指针是存放另一变量的地址的变量,也 称指针变量。它象数组名一样可以直接访问 地址(此前有数组名和单目运算符&可以访 问存储地址)。
ห้องสมุดไป่ตู้
指针概述
指针:房间号,地址 指针所指的对象:房间的内容
int a; int *p1; 指针p1 变量a
&a 目标变量p1
P1=&a;
&运算和*运算
&运算和*运算都属于单目运算,&要求运算量是变量或数
组元素,(取地址运算符)其形式为: & 变量名或数组元素名 其含义为取指定变量或数组元素的地址 *运算符要求运算量是地址,(指针运算符——间址运 算符)其形式为: *指针变量名或目标变量地址 含义为访问指定地址的目标变量 如: int i , j; int *p_1 , *p_2; p_1=&i; p_2=&j;
第六章 指 针
一:指针概述 二:指针变量的定义,引用和作为函数参数 三:指针变量在数组处理中的应用 四:指针变量的定义,引用和作为函数参数 五:字符指针和字符串 六:对象为函数的指针变量 函数指针 七:返回值为指针的函数 指针函数 八:元素为指针的数组 指针数组和多级指针 九:小结
指针是C语言中最具特色的功能之一。指 针在C语言中应用极为广泛,利用指针可以 直接而快速地处理内存中各种数据结构的数 据,特别是数组、字符串、内存的动态分配 等,它为函数间各类数据的传递提供了简捷 便利的方法。 指针使C程序简洁、紧凑、高效,但指 针使用上的灵活性容易导致指针滥用而可能 使程序失控。因此,必须全面正确地掌握C 指针的概念和使用特点。
运行情况如下: a=5,b=9 max=9,min=5
注: 程序中,a和b的值并未改变,但a1、a2的值已经改变, 因为程序始终让a1指向较小者,a2指向较大者,算法采取不 交换整型变量的值而交换指针变量的值的方法。 使用指针处理数据时,指针在使用前必须被赋予一定的地址 值或指定为空指针。一个没有赋值的指针其指向是不定的。 使用指针未定的指针接收数据时,常常会破坏内存中其它领 域的内容,甚至造成系统失控,应注意避免。例如下面对指 针p的使用是不恰当的:
指针变量的相减
两个指针相减的意义并非二指针持有的地址值相减, 而是两指针指向的地址位置之间的数据个数,即结果 为整数。显然,二指针必须是指向同一组数据类型一 致的数据,比如同一个数组。如图(第20张幻灯片的 float指针),指针p、q和数组a数据类型相同。假定p、 q分别指向数组元素a[2]、a[9],则q-p结果为7,p-q结果 为-7。 main() { int *p,*q; int a[30]; p=&a[0];q=&a[1]; printf(“p=%u q=%u q-p=%u \n”,p,q,q-p); }
&运算和*运算
p_1=&i; p_2=&j; 则 p_1和p_2分别是指向变量i,j的指针变量,而*p_1 和*p_2分别是指针变量所指向的变量i和j 下面是将x的值赋给y的两种不同的操作 px &x x x
*px y
px=&x; y=*px;
y
y=x;
指针变量的初始化
格式:数据类型 *指针名=初始地址值; 例:int *p1=&a, *p2=&b; 定义指针变量p1,p2分别指向int型变量a和b …... 说明:1、当把一个变量的地址作为初始值赋给指针时,该变量 必须先说明,且该变量的数据类型必须与指针的数据类型一致。 如 int n; int *p=&n; 2、也可将一个已初始化的指针值作为初值赋给另一个指 针 如 float x,*p=&x,*q=p; 3、也可通过初始化定义某种类型的空指针 如 int *p=0; 或 int *p=NULL (这里的NULL就是整数0)
int *p,a;a=*p;/* 定义指针p,但没给p赋值,p指向不定*/
• 指针的算术运算
设pa和pb是指向相同数据类型的一组数据(常见的是数组) 的指针,如char a[20],*pa=a; n是整数,则指针可以进 行的算术运算有: pa+n,pa-n,pa++,++pa,pa--,--pa,pa-pb 指针与整数的加减运算(移动指针) 指针作为地址量加上或者减去一个整数n,其意义是指针 当前指向位置的前方或者后方第n个数据的位置。由于指针可 以指向不同数据类型,即数据长度不同的数据,所以这种运算 是以指针指向的数据类型长度为计量单位的。 设指针pa指向short型数据,指针px指向long型数据,则 pa=pa+1后,pa所指的内存地址加了2;而px=px+1后,px所指 的内存地址加了4。因此,对某指针p来说,p±n所表示的内存 地址值为: p±(n×数据类型长度字节数)。
为什么学习指针: 如:链表插入,删除等
指针变量:2022
指针所指的对象:5.6
房间内 容
内存用户数据区 ……. 房间名称
变量i 变量j 变量k
2000 2002 2004
3 6 9 ……
3010
2000
变量i_pointer
房间地址
指针型
指针变量的定义,引用和作为函数参数
一:指针类型变量的说明 二:指针类型变量的引用和运算 三:指针类型变量作为函数参数
指针变量的说明
格式:数据类型 *指针名(标识符); 功能:定义指针变量:指针名(标识符) 它所指的对象类型:类型 数据类型 例:int *p1, *p2; 定义指针变量p1,p2它们所指对象类型为整型 …... 说明:1、指针变量也可以和普通变量在一起说明 如 float *pa,d; 2、指针说明的数据类型不是指针变量的数据类型, 而是指针变量的目标变量的类型
图中,指针pa和数组a数据类型相同。假定pa指向数 组元素a[i],则pa±n分别指向相对a[i]前方或后方 第n个元素,而*( pa±n)可分别访问相应的元素。
float a[40],*pa; • • • • • • • • • • • pa-4 pa-3 pa-2 pa-1 pa pa+1 pa+2 pa+3 pa+4 a[ i –4] a[ i –3] a[ i –2] a[ i -1] a[ i ] a[i+1] a[i+2] a[i+3] a[i+4] (pa-4) (pa-3) (pa-2) (pa-1) pa (pa+1) (pa+2) (pa+3) (pa+4) 2004 2008 2012 2016 2020 2024 2028 2032 2036
指针pa±n指向实型数组a情况
例: main() { int a=10,b=20,c=30,d=40; int *pb=&b;
printf(“%d,%d,%d”,*pb,*(pb+2),*pb+2);
} 结果:20,40,22 注意:*(p+n)和*p+n的区别
指针加一、减一运算 指针加一、减一单目运算实现指针本身地址值的变 化。指针加一使指针指向下一个数据的位置(注意不是 指向下一个内存地址!)。在数组中就使得指针顺序下 移指向后一个元素。同样,指针减一使指针指向上一个 数据的位置。在数组中就使得指针逆序移向前一个元素 。因此,重复使用指针加一、减一单目运算,就很容易 实现指针对数组元素的逐个指向和逐个访问。 指针加一、减一单目运算也分为前置运算和后置运 算,当它们和其它运算混合运用时,要注意它们之间的 结合规则和运算顺序。下面列出常用到的四种形式进行 分析(设变量y和指针pa具有相同的数据类型)。
指针变量引用说明
1:若p1=&a; 则*p1=?, &*p1=? *p1为 a, &*p1为&a 2: &a为a的地址(为指针),*&a=? *&a为a 3:p1=&a; (*p1)=?, (*p1)++=? (*p1)为a, (*p1)++为a++ 4: *p1++ 等价于 *(p1++)先访问p1指向的单元,p1再 指向下一单元 5: *++p1 等价于 *(++p1) p1先指向下一单元,再 访问p1指向的单元 6:++*p1 等价于 ++(*p1)
q
a[0] a[1] a[2] a[3] a[4] a[5] a[6]