一、指针变量==存放地址的变量

二、指针类型——决定指向空间的大小

ex1、封装一个函数,实现两个数的交换

ex2、指针指向固定的区域

三、通过指针引用数组

ex3、 要求不管怎么输入五个数,在输出的时候都是由大到小的顺序输出,用函数封装实现

#include <stdio.h>void InitNum(int *parr,int len)
{   int i;puts("请输入5个数:");for(i = 0; i < len; i++){scanf("%d",parr++);}
}void MaxToMin(int *parr,int len)
{   int i,j;int tmp;for(i = 0; i < len-1; i++){for(j = i+1; j < len; j++){if(parr[i] < parr[j]){tmp = parr[i];parr[i] = parr[j];parr[j] = tmp;}             }}puts("");
}void printfArr(int *parr,int len)
{   int i;for(i = 0; i < len; i++){printf("%d ",*parr++);}
}int main()
{  int arr[5];int *p;int len;p = arr;         //数组名就是数组的首地址//p = arr[0];    //数组的首地址就是首个元素的地址len = sizeof(arr)/sizeof(arr[0]);InitNum(arr,len);//实际参数,数组的首地址: 名,首个元素的地址puts("输入的5个数是:");printfArr(arr,len);MaxToMin(arr,len);puts("从大到小排序为:");printfArr(&arr[0],len);return 0;
}

ex4、将数组中的n个元素按逆序存放

void initArray(int *parr, int size)
{int i;for(i=0;i<size;i++){printf("请输入第%i个元素的数据:\n",i+1);scanf("%d",parr++);}
}void revangeArry(int *parr, int size)
{int i,j;int tmp;for(i=0;i<size/2;i++){j = size-1-i;tmp = parr[i];parr[i] = parr[j];parr[j] = tmp;}
}void printArray(int *parr, int size)
{int i;for(i=0;i<size;i++){printf("%d ",*parr++);}putchar('\n');
}int main()
{int arry[5];int size = sizeof(arry)/sizeof(arry[0]);initArray(arry,size);//实际参数,数组的首地址: 名,首个元素的地址printArray(&arry[0],size);revangeArry(arry,size);printArray(&arry[0],size);return 0;
}

四、二维数组的有关指针


五、数组指针( int (*p)[4] )

定义一个指针,指向一个数组!

ex5、输出二维数组任意行列的数

#include <stdio.h>
/*输出二维数组任意行列的数*/void InputHangLie(int *pi,int *pj)
{printf("输入行列值:\n");scanf("%d%d",pi,pj);puts("done!");
}int getTheData(int (*p)[4],int i,int j)
{int data;data = *(*(p+i)+j);//data = p[i][j];return data;//return p[i][j];
}int main()
{int arr[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}};int i,j;int data;InputHangLie(&i,&j);data = getTheData(arr,i,j);printf("%d行%d列的值是%d\n",i,j,data);return 0;
}

六、函数指针

函数名就是地址

ex6、输入两个数,再输入1(取大值),2(取小值),或者3(求和),用函数指针

#include <stdio.h>
#include <stdlib.h>void initNum(int *pdata1, int *pdata2)
{   scanf("%d%d",pdata1,pdata2);
}int getMax(int data1, int data2)
{return data1>data2 ? data1:data2;
}int getMin(int data1, int data2)
{return data1<data2 ? data1:data2;
}int getSum(int data1, int data2)
{return data1+data2;
}int dataHandler(int data1, int data2, int (*pfunc)(int, int ))
{int ret;ret = (*pfunc)(data1,data2);return ret;
}
int main()
{   int a ;int b ;int cmd;int ret;printf("请输入2个数:\n");void (*pinitNum)(int *pdata1, int *pdata2);pinitNum = initNum;(*pinitNum)(&a,&b);//int (*pfunc)(int data1, int data2);int (*pfunc)(int , int );printf("请输入1(取大值),2(取小值),或者3(求和)\n");scanf("%d",&cmd);switch(cmd){case 1:pfunc = getMax;//ret = (*pfunc)(a,b);break;case 2:pfunc = getMin;//ret = (*pfunc)(a,b);break;case 3:pfunc = getSum;//ret = (*pfunc)(a,b);break;default:printf("输入错误!@输入1(取大值),2(取小值),或者3(求和)\n");exit(-1);//包含头文件#include <stdlib.h>break;}ret = dataHandler(a,b,pfunc);printf("ret = %d\n",ret);return 0;
}

七、指针数组( int* p[4] )

ex7、改写ex6,同时获得最大最小求和的值(函数指针数组)

int getMax(int data1, int data2)
{return data1>data2 ? data1:data2;
}int getMin(int data1, int data2)
{return data1<data2 ? data1:data2;
}int getSum(int data1, int data2)
{return data1+data2;
}int main()
{   int a = 10;int b = 20;int ret;int (*pfunc[3])(int , int )={getMin,getMax,getSum};//函数指针数组!for(int i=0;i<3;i++){ret = (*pfunc[i])(a,b);printf("ret = %d\n",ret);}return 0;
}

八、指针函数

返回指针值的函数

ex8、要求用户输入学生序号后,输出该学生的全部成绩,用指针函数实现,找出其中有不及格的课程的学生及其学生号

#include <stdio.h>
/*要求用户输入学生序号后,输出该学生的全部成绩,用指针函数实现*/
/*找出其中有不及格的课程的学生及其学生号*/void getFail(int (*pstu)[4])
{for(int i=0;i<3;i++){for(int j=0;j<4;j++){if(*(*(pstu+i)+j) < 60){printf("第%d位第%d门成绩不合格:%d\n",i+1,j+1,*(*(pstu+i)+j));}}}
}int* getPosPerson(int pos, int (*pstu)[4])//函数指针,返回指针的函数
{int *p;p = (int *)(pstu+pos);return p;
}int main()
{int scores[3][4]={{55,66,77,88},{66,67,68,59},{50,70,78,60}};int *ppos;int pos;printf("请输入你需要看的学生号数:1,2,3\n");scanf("%d",&pos);ppos = getPosPerson(pos-1, scores);//输入0,1,2改为1,2,3for(int i=0;i<4;i++){printf("%d ",*ppos++);}putchar('\n');printf("================================\n");printf("不及格的学生及成绩有:\n");getFail(scores);return 0;
}

九、二级(多级)指针

ex9、改写ex8,要求用户输入学生序号后,输出该学生的全部成绩

十、总结

【C语言学习记录】指针==地址相关推荐

  1. C语言学习记录(14)英文单词排序 查找最长的单词

    C语言学习记录 前言 一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流! 不当之处请斧正!在此感谢!这边就先从学习C语言写起,自己本身对程 ...

  2. C语言 指针 规范,C语言学习知识指针习题集附规范标准答案.doc

    C语言学习知识指针习题集附规范标准答案.doc /*一.选择题1. 变量的指针,其含义是指该变量的_________. a值 b地址 c名 d一个标志2若有语句int *point,a4;和point ...

  3. Fortran语言学习记录

    Fortran语言学习记录** ** 今天是2020年4月1日,上午终于把微软的Visual Studio 2013(https://blog.csdn.net/wobckr/article/deta ...

  4. c语言学习02指针总结

    本人工作Android开发越往高深方向专业,就越发现c语言的重要性.可以说java是简单的封装语言,但大量封装起来的不灵活,而Android的自带的java代码往往有些功能并不完美,这就导致高级开发就 ...

  5. c 语言系统下载地址,最新晨晖C语言学习系统下载地址电脑版-CC软件

    晨晖C语言学习系统是一款专业的c语言学习软件,它的页面简洁,功能强大,非常适合入门级初学者从基础开始学习c语言,它里面拥有大量的知识点以及基础知识,能够帮助初学者循序渐进打下基础,有需要的朋友快来下载 ...

  6. C语言学习笔记---指针

    C语言要玩的好,指针是核心,但是指针在学习的时候看教程往往感觉一看就明白,但是实际用的时候一用就错,而且还不知道错在哪.为了更加深刻的了解指针,将学习过程记录下来,依次加深对指针的理解. 先看看一段测 ...

  7. c++/c语言学习记录时间帖

    双非本科浑浑噩噩过去了,现在双非研一,不想毕业的时候跟大四一样,决定好好学习一门技术,听了一些人的建议,感觉自己研究方向对以后找工作没什么帮助的,在做好导师安排的科研任务的同时,多学一点东西,抓紧ru ...

  8. Linux C语言学习记录(Day2-Day4)

    不断有前辈跟我推荐,学习技术要写博客.既可以巩固记忆,又能时时回顾,发现不足.今天尝试写下第一篇! 大一学过C语言,但是仅仅是会解一些很简单的问题,比如鸡兔同笼,一元二次方程组这样的.学的很浅,在后面 ...

  9. C语言学习记录_2019.02.10

    sizeof:给出某个类型或某个变量在内存中占据的字节数:(1个字节8位,即8比特) 格式符 (1)%ld表示数据按十进制有符号长型整数输入或输出. (2)%d表示数据按十进制有符号整型数输入或输出. ...

最新文章

  1. 阅面科技赵京雷:全面拥抱AI2.0时
  2. SLAM | 三维重建方法之KinectFusion与ElasticFusion详解
  3. Go 如何实现热重启
  4. Web Storage中的sessionStorage和localStorage
  5. 1.4版本上线(第八次会议)
  6. Android开发笔记(四十四)动态UI事件
  7. java B2B2C springmvc mybatis电子商务平台源码
  8. 在ubuntu上搭建开发环境1---在windows7的基础上在安装ubuntu(双系统)
  9. js里apply用法
  10. springboot旅游景区景点购票系统毕业设计毕设作品开题报告开题答辩PPT
  11. 单片机学习笔记-基础知识
  12. A. Harry Klopf是谁?
  13. 网络技术故障背后:50元发动的DDoS流量攻击
  14. Word、PPT、PDF 文件怎么批量插入首页、扉页、尾页?怎么在指定位置插入页?
  15. 小型企业Azure云迁移大型指南
  16. php防止文件盗链,详解PHP防止盗链防止迅雷下载的方法
  17. Lustre 监控, Grafana Dashboard
  18. i春秋2020新春公益赛 GYCTF有关SQL注入题复现
  19. 手把手教你摆地摊之地摊形式有哪些
  20. 【物理应用】超声场可视化仿真模拟【含GUI Matlab源码 1494期】

热门文章

  1. 模拟电路学习之三极管PROTUES
  2. 牛客OI赛制测试赛 E:旅行青蛙
  3. Deconv (Transpose Convolution) 和 Unpooling 的通俗解释
  4. Google大老的网站流量分析管理利器---Google Analytics
  5. 牵手思必驰,博泰车联网要打造一个通用的车载语音平台
  6. 端到端(end-to-end)的含义
  7. SWI-prolog工具开发小案例
  8. PCA主成分分析实战案例
  9. python re库安装_python 库安装方法及常用库
  10. Latex学习--图片处理(格式选择与图片排版)