第8章 指针

8.1 指针变量

1.指针变量定义及赋值:int a; int *p=&a; 或 int a; int *p; p=&a;
2.指针运算符:(1)取地址运算符& (2)取内容运算符* (结合性均为右至左)
3.指针加1,不是纯加1,而是加一个所指变量的字节个数
4.指针变量作为函数参数,例,交换函数swap():

#include<stdio.h>
void swap1(int *p1,int *p2) //交换地址中的值
{int t; //p1,p2中存的是a和b的地址,将p1和p2地址中的内容交换,即p1中a地址中值变为b,p2中b地址中值变为at=*p1;*p1=*p2;*p2=t;
}
void swap2(int *p1,int *p2) //交换形参指针指向的地址,无法返回给主函数p1,p2
{int *t; //交换后p1指向b地址,p2指向a地址,仅形参指向改变,不影响实参t=p1;p1=p2;p2=t;
}
int main()
{int a,b;int *p1,*p2;p1=&a;p2=&b;while(~scanf("%d%d",p1,p2)){printf("a=%d,b=%d\n",a,b);printf("p1=%d,p2=%d\n",p1,p2);swap1(p1,p2);printf("交换值结果:\n");printf("a=%d,b=%d\n",a,b);printf("p1=%d,p2=%d\n",p1,p2);/*swap2(p1,p2);printf("交换地址测试结果:\n");printf("a=%d,b=%d\n",a,b);printf("p1=%d,p2=%d\n",p1,p2);*/}return 0;
}

8.2 指向数组的指针

8.2.1指向一维数组的指针

1.定义及赋值:int a[5],*p; p=&a[0]; 或p=a;
2.引用数组元素
(1)地址表示法:a[i]的地址:p+3、a+3、&a[i]
(2)数组元素表示法:a[i]的访问:*(p+3)、*(a+3)、a[i]
(3)指针变量加下标:指针变量可以加下标:p[i]
(4)指针变量与数组名的引用区别:数组名表示数组首地址,属于常量,p为指向数值a的指针变量,p++可以,a++不可以
(5)例,逆序输出10个数

#include<stdio.h>
int main()
{int i,n,*p,a[10];p=a;while(~scanf("%d",&n)){for(i=0; i<n; i++){scanf("%d",&a[i]);}for(i=n-1; i>=0; i--) //下标法访问数组{printf("%d ",a[i]);}printf("\n");for(i=n-1; i>=0; i--) //数组名访问数组{printf("%d ",*(a+i));}printf("\n");for(i=n-1; i>=0; i--) //指针变量访问变量(1){printf("%d ",*(p+i));}printf("\n");for(p=a+n-1; p>=a; p--) //指针变量访问变量(2){printf("%d ",*p);}printf("\n");}return 0;
}

8.2.2指向多维数组的指针

int s[3][4];
1.行转列:s+0、s+1、s+2是每一行的首地址,进行的是行操作,若想利用s对行中各元素操作,必须将行操作方式转为列操作方式。转换方式*(s+i)(i=0,1,2)
2.二维数组的指针表示形式:
(1)数组首地址:s
(2)i行首地址:s+i = &s[i]
(3)i行j列元素地址:s[i]+j = *(s+i)+j = &s[i][j]
(4)i行j列元素:*(s[i]+j) = *(*(s+i)+j) = s[i][j]
3.指向多维数组的指针:
(1)指向数组元素的指针变量 int p=s[0];
(2)指向由m个元素组成的一维数组的指针变量:int (*p)[4]; p=s;
例:

#include<stdio.h>
int main()
{int s[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};//(1)用指向数组元素的指针变量输出数组元素int *p1;for(p1=s[0]; p1<s[0]+12; p1++){if((p1-s[0])%4==0){printf("\n");}printf("%d ",*p1);}printf("\n");//(2)用指向一维数组的指针变量输出任一行任一列的元素int i,j;int (*p2)[4];p2=s;scanf("%d%d",&i,&j);printf("%d\n",*(*(p2+i)+j));return 0;
}

8.3 指向字符串的指针

1.可以不定义字符数组,直接定义指向字符串的指针变量,利用指针变量操作字符串,如:
char *str = “I’m a student”; printf(“%s\n”,str);

8.4 指向函数的指针

1.定义指向函数的指针变量格式:数据类型(*指针变量名)();
2.赋值格式:指针变量名=函数名;
3.调用格式:(*指针变量名)(实参表)
例:

//输入5个数,求最大值
#include<stdio.h>
int max(int *p)
{int i;int m=p[0];for(i=1; i<5; i++){if(*(p+i)>m) m=*(p+i);}return m;
}
int main()
{int i,m,a[5];int (*f)(int *p); //定义指向函数的指针变量ffor(i=0; i<5; i++){scanf("%d",&a[i]);}f=max;  //将函数max入口地址赋值给fm=(*f)(a);  //利用指针变量f调用函数printf("%d\n",m);return 0;
}

4.指向函数的指针做函数参数
5.返回指针值的函数

8.5 指向指针的指针

C语言程序设计 细节总结(第8章 指针)相关推荐

  1. c语言循环程序设计教案,10 《C语言程序设计》教案 第三章 程序的控制结构(6)—循环结构 while和do while.doc...

    10 <C语言程序设计>教案 第三章 程序的控制结构(6)-循环结构 while和do while.doc C 语言程序设计课程教案表 授课题目 第三章 程序的控制结构 (6) 循环结构 ...

  2. 大学 C语言程序设计第一讲,c语言程序设计1第一讲(第一章上).ppt

    c语言程序设计1第一讲(第一章上).ppt 知识可以改变命运! 高级语言程序设计 主讲教师:贾彩燕 计算机与信息技术学院 计算机科学与技术系 cyjia@bjtu.edu.cn 计算机与人沟通 计算机 ...

  3. 郑莉版java第三章答案_java语言程序设计(郑莉)第七章课后习题答案.docx

    java语言程序设计(郑莉)第七章课后习题答案.docx 还剩 10页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: if (matrix.isTria ...

  4. 郑莉java课后答案,Java语言程序设计(郑莉)第三章课后习题答案

    <Java语言程序设计(郑莉)第三章课后习题答案>由会员分享,可在线阅读,更多相关<Java语言程序设计(郑莉)第三章课后习题答案(10页珍藏版)>请在人人文库网上搜索. 1. ...

  5. 谭浩强C语言程序设计代码示例第6章(笔记)

    谭浩强C语音程序设计代码示例第六章(新手入门笔记) 第一章包含参考书,在线编译工具,代码,注释等. 遵循共享互助原则 谭浩强C语言程序设计代码示例(1-3章) 谭浩强C语言程序设计代码示例第4章(笔记 ...

  6. 谭浩强C语言程序设计代码示例第5章(笔记)

    谭浩强C语音程序设计代码示例第四章(新手入门笔记) 第一章包含参考书,在线编译工具,代码,注释等. 遵循共享互助原则 谭浩强C语言程序设计代码示例(1-3章) 谭浩强C语言程序设计代码示例第4章(笔记 ...

  7. c语言第八章上机答案,C语言程序设计上机指导第8章答案.doc

    C语言程序设计上机指导第8章答案 上 机 报 告 课程名称 计算机程序设计基础(C语言) 专业班级 姓 名 学 号 上机题目函数调用程序设计实 验 室机房同组人数1实验时间年 月 日成 绩指导教师一. ...

  8. python语言用什么来表明每行代码的层次关系_《计算机二级Python语言程序设计考试》第2章: Python语言基本语法元素...

    注明:本系列课程专为全国计算机等级考试二级 Python 语言程序设计考试服务 目录 考纲考点 程序的基本语法元素:程序的格式框架.缩进.注释.变量.命名.保留字.数据类型.赋值语句.引用 基本输入输 ...

  9. c语言程序设计江宝钏第九章,C语言程序设计 (江宝钏 著) 清华大学出版社 第9章习题答案1...

    C语言程序设计 (江宝钏 著) 清华大学出版社 第9章习题答案1 一.程序阅读题 习题 9 答案 1.B2. C 二.编程题 1. #include #defineM 10 structstudent ...

最新文章

  1. 在Django项目中使用富文本编辑器
  2. 北航计算机学硕还是专硕,2018北航计算机专硕总分第一录取经验
  3. Python闭包及其作用域
  4. mysql派生数据,在数据库中,应该何时存储派生数据?
  5. 最新综述:从多个角度介绍多模态对话信息搜索(MMCIS)任务
  6. WCF学习- 体系结构
  7. Mysql的关联查询语句
  8. 基于IO流读取的 完成 用户登录,注册,修改,查看所有用户,删除功能
  9. nedc工况_东南DX3 EV续航升级 NEDC综合工况续航451公里
  10. 【转】java基础知识总结
  11. linux服务器删除weblogic,linux weblogic安装和卸载
  12. 搭建自己的框架WedeNet(五)
  13. Windows下调试工具Windbg入门
  14. 微麦投影仪android遥控器,投影仪遥控器如何使用 投影仪遥控器使用方法【详解】...
  15. 某短视频的X-Gorgon,X-Ladon等加密
  16. solaris 9 一般安全设置
  17. 硬件中的三角函数计算 Cordic算法入门
  18. 华擎主板bios设置图解_【华擎Z170评测】BIOS设置及超频方法简介_华擎 Z170 超频方程式_主板评测-中关村在线...
  19. 8.1 Handling Relationships
  20. Revit二次开发之双事件:空闲事件与DocumentChanged事件

热门文章

  1. 2022-2028年中国氟硅橡胶产业发展动态及投资前景分析报告
  2. C++核心编程(三)
  3. SpringBoot (八) :Spring Boot多数据源(JdbcTemplate)配置与使用
  4. pyspark汇总小结
  5. 奇异值分解与最小二乘问题 线性回归
  6. LeetCode简单题之数组形式的整数加法
  7. 王道考研 计算机网络笔记 第三章:数据链路层
  8. H.264 Video Codec速度和质量
  9. 3D-camera结构光原理
  10. DCN-cs6200 ospf v2配置