云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 第十章 指针

第十章 指针

  • 62 次阅读
  • 3 次下载
  • 2025/6/15 13:49:09

10.7 指针小结

10.7.1 指针基本概念与性质小结

1.指针是数据在内存中所占存储空间的首地址。存放指针值的变量称为指针变量,当指针变量的值为某变量的地址时,称这个指针变量指向该变量。同其他数据类型的变量一样,指针变量也必须在使用前加以定义。

2.指针变量的内容可以是0、NULL和一个确定的地址。其中0和NULL等价,它们表示空指针。除0外,其他任何常量都不允许直接赋值给指针变量。

3. C语言中用地址运算符(&)返回某变量的地址。地址运算符的操作数必须是一个内存变量,不能把地址运算符用于普通常量、表达式或寄存器类型的变量。

4.C语言用指针运算符(*,也称为间接引用运算符或复引用运算符)间接引用指针变量所指向数据的值。根据所指向的数据类型,间接引用时从指针变量存储的地址开始引用不同长度的数据。

5.指针常用于动态内存分配与管理,为提高在不同环境的可移植性,C语言提供了一个单目运算符sizeof返回某数据类型所占用的字节数。

6.如果调用函数要求被调用函数修改某些数据的值,应该把这些数据的地址作为实参传递给被调用函数的相应形参,被调用函数中的形参用指针运算符(*)间接修改调用函数中的相应实参的值。

7.数组名作为形参时,编译程序实际上使用指针变量进行处理。

8.使用指向函数的指针变量作为参数,可以在不改变调用函数的情况下根据需要调用不同的函数。

10.7.2 有关指针的数据类型的小结

指针可以指向不同数据类型的数据,包括单个变量、数组元素,甚至指针类型,也可以指向函数。多个相同类型的指针也可以构成指针数组。

定义 int i; int *p; int a[n]; int *p[n]; int (*p)[n]; int f(); int *p(); int (*p)(); int **p;

含 义 定义整型变量i 定义p为指向整型数据的指针变量 定义整型数组a,它有n个元素 定义指针数组p,它由n个指向整型数据的指针元素组成 定义p为指向含n个元素的一维数组的指针变量 f为返回整型值的函数 定义p为返回指针值的函数,该指针指向整型数据 定义p为指向整型函数的指针变量 定义二重指针变量p,它指向一个指向整型数据的指针变量 225

10.7.3 指针运算的小结

(1)指针变量加(减)一个整数

例如:p++、p--、p+i、p-i、p+=i、p-=i

指针变量加(减)常用于连续的存储区域中指针向前(后)移动指向的位置。 (2)指针变量赋值

将一个对象的首地址赋给一个指针变量。 p=&a; /* 将变量a的地址赋给p */ p=array; /* 将数组array的首地址赋给p */ p=&array[i]; /* 将数组array第i个元素的地址赋给p */ p=max; /* max为已定义的函数,将max的入口地址赋给p */ p1=p2; /* p1和p2是同类型的指针变量,将p2的值赋给p1 */

(3)两个指针变量相减

如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数。

(4)两个指针变量比较

如果两个指针变量指向同一个数组的元素,则两个指针变量可以进行比较。指向前面的元素的指针变量“小于” 指向后面的元素的指针变量。

指针之间也可以与NULL进行比较。一般地,对于刚刚定义还没有和某个地址相结合的一个指针,某些系统给它的初值为NULL(用户也可以给定初值NULL)。通过该比较,我们可以知道该指针是否指向了内存中的某个地址。

习 题

一.填空题

1. 指针变量是把内存中另一个数据的 作为其值的变量。 2. 能够直接赋值给指针变量的整数是 。 3. 如果程序中已有定义:int k;

1) 定义一个指向变量k的指针变量p的语句是 。 2) 通过指针变量,将数值6赋值给k的语句是 。

3) 定义一个可以指向指针变量p的变量pp的语句是 。 4) 通过赋值语句将pp指向指针变量p的语句是 。

5) 通过指向指针的变量pp,将k的值增加一倍的语句是 。

4. 当定义某函数时,有一个形参被说明成int *类型,那么可以与之结合的实参类型可以

是 、 等。 5. 以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的

226

字符串为:556,则输出十进制整数366。请填空。 #include main( )

{

char *p,s[6];

int n; p=s; gets(p); n=*p-'0';

while( != '\\0') n=n*8+*p-'0'; printf(\ }

二.选择题

1. 若有定义:int i,j=7,*p=&i; 则与i=j;等价的语句是 。

A) i=*p; B) *p=*&j; C) i=&j; D) i=**p; 2. 设int *p,i;以下正确的语句是 。

A) *p=10; B) i=p; C) p=&i; D) p=2*p+1; 3. 设char *s;以下正确的语句是 。

A) s=“C Language”; B) *s=“C Language”; C) **s=“C Language”; D) *s=‘C’;

4. 设有语句:int a[10]={0,1,2,3,4,5,6,7,8,9}, *p=a;以下对数组a中的数组元素的不正确引用是: 。

A) a[p-a] B) *(&a[i]) C) p[i] D) *(&(a+i)) 5. 设有定义:int (*ptr)[M];其中ptr是 。

A) M个指向整型变量的指针;

B) 指向M个整型变量的函数指针;

C) 一个指向具有M个整型元素的一维数组的指针变量;

D) 具有M个指针元素的一维指针数组,每个元素都只能指向整型量。 6. 下列程序的运行结果是 。

#include main() {

int k;

char *s=“a\\n35\\b”; for(k=0;*s++;k++) printf(“k=%d\\n”,k); }

A) k=5 B) k=6 C) k=7 D) k=8

227

7. 下列程序的运行结果是 。

#include

void func(int *a,int b[]) {

b[0]=*a+6; } main() {

int a,b[5]; a=0; b[0]=3;

func(&a,b);

printf(“%d\\n”, b[0]); }

A) 6 B) 7 C) 8 D) 9

8. 设已有定义: char *st=\下列程序段中正确的是 。

A) char a[11], *p; strcpy(p=a+1,st[4]); B) char a[11]; strcpy(++a,st); C) char a[11]; strcpy(a,st);

D) char a[], *p; strcpy(p=&a[1],st+2);

9. 假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命令行: prg hello good↙后,程序的输出结果是 。

main(int argc,char *argv[]) {

int i;

if(argc<=1) return; for(i=1;i

printf(\

}

A) hello good B) hg C) hel D) hellogood 10. 有如下程序段:

int *p,a=10,b=1; p=&a; a=*p+b;

执行该程序段后,a的值为 。

A) 12 B) 11 C) 10 D) 编译出错 11. 对于基类型相同的两个指针变量之间,不能进行的运算是 。

A) < B) = C) + D) –

228

搜索更多关于: 第十章 指针 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

10.7 指针小结 10.7.1 指针基本概念与性质小结 1.指针是数据在内存中所占存储空间的首地址。存放指针值的变量称为指针变量,当指针变量的值为某变量的地址时,称这个指针变量指向该变量。同其他数据类型的变量一样,指针变量也必须在使用前加以定义。 2.指针变量的内容可以是0、NULL和一个确定的地址。其中0和NULL等价,它们表示空指针。除0外,其他任何常量都不允许直接赋值给指针变量。 3. C语言中用地址运算符(&)返回某变量的地址。地址运算符的操作数必须是一个内存变量,不能把地址运算符用于普通常量、表达式或寄存器类型的变量。 4.C语言用指针运算符(*,也称为间接引用运算符或复引用运算符)间接引用指针变量所指向数据的值。根据所指向的数据类型,间接引用时从指针变量存储的地址开始引用不同长度的数据。

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com