范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

C指针的10种经典应用场合

  都说指针是C语言的精髓,那指针究竟有哪些经典应用场合呢?
  指针有三大类:指向数据的指针,指向函数的指针和范型指针(void*)。
  其经典的应用场合,可以分为以下10类:1 与函数相关的使用
  1.1 在函数中用作输出型参数,产生副作用(更新被调函数中的局部变量的值);
  1.2 在函数中用作输出型参数,用于返回多个值;
  1.3 在函数中用作输入型参数,指向复合类型,避免传值的副作用(性能损耗);
  1.4 用做函数返回值,返回一个左值;
  1.5 用于指向函数的函数指针,使用函数指针调用回调函数;
  2 用于指向堆内存;
  3 与void配合使用,用void*来表示一个泛型指针;
  4 用于指向数组名(数组指针);
  5 用于指向字符串常量(字符串常量指针);
  6 在数据结构中,用作链式存储;
  附加:在字符串、文件操作中跟踪操作位置;
  1 与函数相关的使用
  1.1 在函数中用作输出型参数,产生副作用(更新被调函数中的局部变量的值)#include  void demo(int *ap,int size, int *max) {     *max=ap[0];     for(int i=1;i*max)             *max = ap[i]; } int main() {     int max,ap[5]={1,2,8,4,5};     demo(ap,5,&max);     printf("%d ",max);     getchar();     return 0; }
  1.2 在函数中用作输出型参数,用于返回多个值#include  #include  int equationSolve(double a,double b,double c,double *x1,double *x2) {     int delta = a*a-4*a*c;     if(delta>=0)     {         *x1 = (-b+sqrt(delta))/2*a;         *x2 = (-b-sqrt(delta))/2*a;         return 1;     }     else          return 0; }  int main(void) {     double x1,x2;     if(equationSolve(1,3,-14,&x1,&x2))         printf("x1=%.2f x2=%.2f ", x1,x2);     else          printf("无实根! ");     getchar();     return 0; } /* x1=2.27 x2=-5.27 */
  1.3 在函数中用作输入型参数,指向复合类型,避免传值的副作用(性能损耗)#include  typedef struct Inventory{     int sku;     char name[36];     char unit[12];     char supplier[48];     double price;     double stock; }Inven;  void demo(const Inven *p) {     printf("The amounts is %f ",p->price * (*p).stock);     // …… } int main() {     Inven inven={123,"carban fibre","kg","uc",128,100};     demo(&inven);     getchar();     return 0; }
  1.4 用做函数返回值,返回一个左值#include   #include  #include    void printIntArray(void** array, size_t length) {      printf("Array at %p ", array);      while (length--) {          printf(" [%zu] at %p -> %p", length, array + length, *(array + length));          if (*(array + length)) {              printf(" -> %d", *(int*)*(array + length));          }          printf(" ");      }  }   void* getElement(void** array, size_t index) {      return *(array + index);  }   int main(int argc, char** argv) {      const size_t n = 5;      size_t i;           /* n element array */      void** test = malloc(sizeof(void*) * n);      i = n;      while (i--) {          *(test + i) = NULL;      }           /* Set element [1] */      int testData = 123;      printf("testData at %p -> %d ", &testData, testData);      *(test + 1) = (void*)&testData;           printIntArray(test, n);           /* Prints 123, as expected */      printf("Array[1] = %d ", *(int*)getElement(test, 1));           getchar();     return 0;  }
  返回左值在C++中应用比较多,特别是用引用来返回左值,如返回ostream&,或重载[]、=等运算符。
  1.5 用于指向函数的函数指针,使用函数指针调用回调函数// 通用的冒泡排序函数的应用 #include  #include  using namespace std;  template  void sort(T a[], int size, bool (*f)(T,T));                     // callee bool increaseInt(int x, int y)  {return x0;}  // callbackee4   int main()                                                      // caller {     int a[] = {3,1,4,2,5,8,6,7,0,9}, i;     char *b[]= {"aaa","bbb","fff","ttt","hhh","ddd","ggg","www","rrr","vvv"};          sort(a, 10,increaseInt );     for (i = 0; i < 10; ++i) cout << a[i] <<"	";     cout << endl;          sort(a, 10,  decreaseInt);     for ( i = 0; i < 10; ++i) cout << a[i] <<"	";     cout << endl;            sort(b, 10, increaseString );     for (i = 0; i < 10; ++i) cout << b[i] <<"	";     cout << endl;          sort(b, 10,  decreaseString);     for ( i = 0; i < 10; ++i) cout << b[i] <<"	";     cout << endl;       while(1);     return 0; }  // 通用的冒泡排序函数 template  void sort(T a[], int size, bool (*f)(T,T)) {     bool flag;     int i, j;          for (i = 1; i < size; ++i) {         flag = false;         for (j = 0; j  #include  int** demo(int r,int c) {     int **ap = (int**)malloc(sizeof(int*)*r);     for(int i=0;i #include  #include  int swap2(void *x, void *y, int size) {     void *tmp;     if((tmp=malloc(size)) == NULL)         return -1;     memcpy(tmp,x,size);     memcpy(x,y,size);     memcpy(y,tmp,size);     free(tmp);     return 0; } int main() {     int a=3,b=4;     swap2(&a,&b,sizeof(int));     printf("%d %d ",a,b);     double c=3,d=4;     swap2(&c,&d,sizeof(double));     printf("%f %f ",c,d);     getchar();     return 0; }
  4 用于指向数组名(数组指针)#include  void funcP(int *p,int r,int c) {     for(int i=0;i #include   int main() {     char str[80] = "This is - www.runoob.com - website";     const char s[2] = "-";     char *token;      /* 获取第一个子字符串 */     token = strtok(str, s);      /* 继续获取其他的子字符串 */     while (token != NULL)     {         printf("%s ", token);          token = strtok(NULL, s);     }     printf(" ");     for (int i = 0; i < 34;i++)         printf("%c", str[i]);      return (0); }
  二进制文件的随机读写:
  在标记文件信息的结构体FILE中,包含3个标识文件操作位置的指针。typedef struct _iobuf {     char *_ptr;  //文件操作的下一个位置     int _cnt;    //当前缓冲区的相对位置     char *_base; //指基础位置(即是文件的其始位置)     int _flag;   //文件标志     int _file;   //文件的有效性验证     int _charbuf;    //检查缓冲区状况,如果无缓冲区则不读取     int _bufsiz;     //缓冲区大小     char *_tmpfname; //临时文件名 }FILE;
  code demo:#include  // 按记录分块读写文件 #include  #include #include using namespace std;  class Student { public:     Student(void) {}     Student(int n, char nam[20], float s):     num(n),score(s)     {         strcpy(name,nam);     }     void setNum(int n)     {         num=n;     }     void setName(char nam[20])     {         strcpy(name,nam);     }     void setScore(float s)     {         score=s;     }     void show()     {         cout<
冬至煮饺子,开盖煮还是盖盖煮?记得加1样,饺子筋道不破皮冬至节气,是二十四节气的第二十二个节气,也是春节之前老百姓们颇为重视的传统节日。俗话说冬至大如年,冬至在不少地区被称为过小年。传统节日自然有着属于它的传统习俗和食物,除了祭祖,冬至毛阿敏丈夫去世高调签约后踩雷西城男孩刷爆视频号中植系实控人解直锟去世中植企业集团官方公众号发布讣告,中植企业集团创始人解直锟先生,因心脏病突发抢救无效,于2021年12月18日9时40分在北京逝世,享年61岁。解直锟控制的上市徒步五台山,大雾中前行,风云变幻,有计划去的带好装备五台山徒步预见的和遇见的都让我心生敬畏徒步连穿五台山的路上风云变幻,有去的带好装备要注意安全了哦!6月份去的,一直想记录但都没能写下来,感觉再不写都忘记了忘记自己走过的路看到的景色腾讯收购喋血复仇开发商TurtleRock并维持器独立运营喋血复仇(Back4Blood)的开发商TurtleRock公司发生了很多事情,该工作室不仅宣布被中国企业腾讯收购,而且还为其广受好评的合作僵尸射击游戏发布了上市后的第一个大型内容LOL德杯Xiaoyueji厄斐琉斯输出拉满,iG极限翻盘LGD成功出线2021德玛西亚杯小组赛第三日迎来B组的比赛,在转会期迎来重大调整的iG与LGD两队发挥非常出色,此前三场比赛均取得全胜战绩,这场正面对决基本上决定了出线资格的归属。iG在前中期陷TBC3阶段火法天赋推荐TBC1阶段是冰法的天下,2阶段则是奥法的天下,那么3阶段因为急速装备的大量出现,火法开始称霸天下了。下面是一个3阶段单体主打火球术,AOE主要烈焰风暴冲击波和奥爆的火法天赋3点火TTG赢狼队晋级总决赛,SK教练却要开始头痛了,TTG比狼队更加棘手这次KPL秋季赛出现过很多爆冷的情况,比如AG超玩会季后赛一轮游,XYG第一次打KPL就拿到四强的成绩,而最让玩家感觉到意外的是狼队在败者组决赛输给了TTG,并且双方还没有打满7局终于明白黄冰糖和白冰糖区别在哪里了?了解清楚,别再买错了大家好,我是大磊,冰糖是我们日常生活中经常见到的美食,也是烹饪过程中不可或缺的调味品,比如炖甜品,熬糖色,做拔丝菜等。冰糖一般是由蔗糖或白砂糖煎炼而成,颜色有白色和黄色之分,多呈透蚝油生菜很多人做错了,教几个小技巧,脆嫩鲜香不发黑,特爽口嗨大家好!我是小猫爱厨房的小猫,今天又和大家见面了,分享生活分享美食分享快乐!今天小猫给大家带来的是一道用生菜制作的半冷半热的菜蚝油生菜这是一道口感脆爽,味道清香爽口特别开胃下饭的卤猪蹄香无杂味有诀窍,加这3样,猪皮红润油亮,咬一口汁水四溢民以食为天,吃喝之外无大事,大家好,欢迎来到生活佳美食,这里每天为您更新各种家常菜农家菜及地方特色食谱的做法,让您的餐桌生活365天不重样。今天给大家分享的是卤猪蹄香无杂味有诀窍,对孩子超级有效的止咳食物冰糖金桔家里的孩子最近一直咳嗽,吃了止咳的药也不管用,看见网上做的冰糖金桔说有止咳的效果,也学着做了一下,孩子吃了两顿,咳嗽明显好了很多,分享给大家。用料金桔500克冰糖150克柠檬一个盐
女性来例假时,突然流出一股血块,是身上的肉吗?大有学问姨妈,每个女人都要经历,从第一次来,到每个月规律。但是每个女人的体质不同,所以有些会腹痛,腰疼,感觉肚子有东西要掉下来一样,所以每次一来,女性的脾气都会特别暴躁。不来嘛又担加速复苏!广东餐饮收入连续三年占比超过全国10广东作为国内食饮产业的消费重镇,其餐饮在全国地区率先复苏。日前,华南地区餐饮食品饮料消费趋势报告在深圳发布。报告显示,广东省餐饮行业自2020年后,已连续三年实现全省餐饮行业收入占光影璀璨!杭州亚运村正式亮灯记者从杭州亚运村运行管理中心获悉,为确保赛事期间杭州亚运村运行顺利,杭州亚运村运行管理中心近日在村内进行了配电设施全负荷试验和供水压力测试。杭州亚运村位于钱塘江南岸的钱江世纪城北部从今以后,只有这一种赚钱方式了作者水木然本文选自水木然新书人间清醒1hr世界上99的人的成长过程就像一场慢性自杀每天杀掉一点天真,杀掉一点认真,杀掉一点热情多一点伪装,多一点顺从,多一点现实。因为他们没有强大的曾经声名显赫的明星分析师姜超,如今自己操盘基金业绩垫底曾经行业荣誉拿到手软,被称为宏观第一分析师的姜超,在两年前开启了自己的职场新旅程。2021年从卖方海通证券加盟买方中泰资管后,姜超在当年4月12日开始管理资管产品中泰超新星1号,成(财经行情)纽约金价11日上涨新华社芝加哥4月11日电(记者徐静)纽约商品交易所黄金期货市场交投最活跃的6月黄金期价11日比前一交易日上涨15。2美元,收于每盎司2019美元,涨幅为0。76。市场分析人士认为,华夏基金25周年答卷做资管行业的乐高,打造多资产全能平台4月7日,北京春光正盛。东三环中路7号,千禧大酒店里,华夏基金正在召开一场春季策略会,500人的会场座无虚席。这是时隔两年,华夏基金首次举办如此规模的线下策略会。做资管行业的乐高今海外华文媒体探寻内陆首个国家级开发开放新区发展密码图为参访团参观北京理工大学重庆创新中心开发研制的分体式飞行汽车。陈超摄中新网重庆4月12日电(记者刘相琳)行走中国2023海外华文媒体高层川渝行参访团11日至12日走进内陆首个国家浙江省侨商会倾听新侨心声知侨情暖侨心解侨难浙江省侨商会赴嘉兴开展访侨企送服务活动。刘家兵摄中新网嘉兴4月12日电(郭其钰鲍梦妮)4月11日12日,浙江省侨商会会同发改经信商务银保监侨联等部门和律师顾问团一行,赴浙江嘉兴开展2022年报顺丰控股不惧外部压力,业绩实现较好增长今天我们一起盘下顺丰控股的2022年报表现出的核心财务特征。1公司业绩大幅增长,开源式业绩增长质量较高,且表现出较高的成长性。2022年虽面临诸多外部挑战,但公司始终坚持可持续健康成都国际铁路港迎来首批乌兹别克斯坦粮食成都国际铁路港迎来首批乌兹别克斯坦粮食。成都国际铁路港供图中新网成都4月12日电(记者张浪)12日,首批来自乌兹别克斯坦的绿豆从撒马尔罕经霍尔果斯抵达位于成都青白江的成都国际铁路港