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

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

ID:61423528

大小:48.00 KB

页数:10页

时间:2021-01-28

C语言教材 第七章 指针 实验.doc_第1页
C语言教材 第七章 指针 实验.doc_第2页
C语言教材 第七章 指针 实验.doc_第3页
C语言教材 第七章 指针 实验.doc_第4页
C语言教材 第七章 指针 实验.doc_第5页
资源描述:

《C语言教材 第七章 指针 实验.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第七章指针第一部分知识训练【知识要点】1.地址与指针指针变量的概念:用一个变量专门来存放另一个变量的地址。2.指向变量的指针变量指针变量的形式:基类型*指针变量名;&:取地址运算符;*:指针运算符。3.指针与数组引用一个数组元素可以用下标法和指针法;可以用数组名作函数的参数。4.指针与函数函数指针变量定义的一般形式为:类型说明符 (*指针变量名)();一个函数的返回值可以是一个函数。【典型习题与解析】5. char*constp;charconst*p constchar*p 上述三个有什么区别?【

2、解析】char*constp;//常量指针,p的值不可以修改;  charconst*p;//指向常量的指针,指向的常量值不可以改;  constchar*p;//和charconst*p。6. main(){   inta[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

3、。 &a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)。 int*ptr=(int*)(&a+1);则ptr实际是&(a[5]),也就是a+5。  原因如下:1)&a是数组指针,其类型为int(*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。2)a是长度为5的int数组指针,所以要加5*sizeof(int),所以ptr实际是a[5],  但是prt与(&a+1)类型是不一样的(这点很重要),所以prt-1只会减去

4、sizeof(int*)  a,&a的地址是一样的,但意思不一样。3)a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5]。【练习题】一、填空题1.指针变量是把内存中另一个数据的作为其值的变量。2.能够直接赋值给指针变量的整数是。3.如果程序中已有定义:intk;1)  定义一个指向变量k的指针变量p的语句是。2)  通过指针变量,将数值6赋值给k的语句是。3)  定义一个可以指向指针变量p的变量pp的语句是。

5、4)  通过赋值语句将pp指向指针变量p的语句是。5)  通过指向指针的变量pp,将k的值增加一倍的语句是。4.当定义某函数时,有一个形参被说明成int*类型,那么可以与之结合的实参类型可以是、等。5.以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数366。请填空。#includemain(){char*p,s[6];intn;p=s;gets(p);n=*p-‵0‵;while(!='')n=n*8+*p-‵0‵

6、;printf("%d",n);}二、选择题1.变量的指针,其含义是指该变量的()。  A)值      B)地址 C)名      D)一个标志2.下面程序的运行结果是()。  #include   #include   main()  {    char*s1="AbDeG";   char*s2="AbdEg";    s1+=2;s2+=2;   printf("%d",strcmp(s1,s2));  }  A)正数   B)负数  C)零  

7、D)不确定的值3.若有以下定义,则对a数组元素的正确引用是()。inta[5],*p=a;A)*&a[5]  B)a+2 C)*(p+5) D)*(a+2)4.若有以下定义,则p+5表示()。int a[10],*p=a;A)元素a[5]的地址          B)元素a[5]的值C)元素a[6]的地址          D)元素a[6]的值5.以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。voidDelblank(char*s){inti,t;charc

8、[80];for(i=0,t=0;①;i++)if(!isspace(②))c[t++]=s[i];c[t]=‘’;strcpy(s,c);}①A)s[i]B)!s[i]C)s[i]=‘’D)s[i]==‘’②A)s+iB)*c[i]C)*(s+i)=‘’D)*(s+i)6.以下conj函数的功能是将两个字符串s和t连接起来。char*conj(char*s,char*t){char*p=s;while(*s)①;while(*t){*s=②;s++;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。