zoukankan      html  css  js  c++  java
  • const(一)

    今天编写一个字符窜处理函数,因为不想让字符窜在子函数中被修改,因此传参数时,将参数设置成了常量指针,代码如下:
    
     1 /*
      2  *作者:杜琪
      3  *功能:在一个字符窜中进行搜索,查找所有在一个给定字符集合中出现的字符
      4  *时间:2012.3.21
      5  *心得:1、const的用法,编译时有警告?
      6  *答:常量指针只能赋值给常量指针 
      7  * */
      8 #include <stdio.h>
      9 #include <stdlib.h>
     10 char  *find_char(char const *source,char const *chars)
     11 {
     12     if (source == NULL || chars == NULL)
     13         return NULL;
     14     char  *p = NULL;
     15     char  *q = source;
     16     for ( ; *q != '\0'; q++)
     17     { 
     18         p = chars;
     19         for ( ; *p != '\0'; p++)
     20         { 
     21             if (*p == *q)
     22                 return q;
     23         }
     24     }
     25     return NULL;
     26 }
     27 int main()
     28 {
     29     char *source = "ABCDEF";
     30 //  char *chars = "XRCQEF";//返回C
     31     char *chars = "XYZ";//查找失败
     32     char *d = find_char(source,chars);                                                                                                            
     33     if (!d)
     34         printf("查找失败\n");
     35     else
     36         printf("%c\n",*d);
     37     return 0;
     38 }
    ~    


    
    

    编译虽然可以通过,但是会出现如下警告:

    find.c:15:13: 警告: initialization discards ‘const’ qualifier from pointer target type [默认启用]
    find.c:18:5: 警告: assignment discards ‘const’ qualifier from pointer target type [默认启用]

    经查寻后发现,是因为

    char  *q = source;
    因为source是常量指针,因此q也必须设置成常量指针,同样,对于子函数的返回值以及主函数的d都是如此,所以,修正后代码如下:
      1 /*
      2  *作者:杜琪
      3  *功能:在一个字符窜中进行搜索,查找所有在一个给定字符集合中出现的字符
      4  *时间:2012.3.21
      5  *心得:1、const的用法,编译时有警告?
      6  *答:常量指针只能赋值给常量指针 
      7  * */
      8 #include <stdio.h>
      9 #include <stdlib.h>
     10 char const *find_char(char const *source,char const *chars)
     11 {
     12     if (source == NULL || chars == NULL)
     13         return NULL;
     14     char const *p = NULL;
     15     char const *q = source;
     16     for ( ; *q != '\0'; q++)
     17     {  
     18         p = chars;
     19         for ( ; *p != '\0'; p++)
     20         { 
     21             if (*p == *q)
     22                 return q;
     23         }
     24     }
     25     return NULL;
     26 }
     27 int main()
     28 {
     29     char *source = "ABCDEF";
     30 //  char *chars = "XRCQEF";//返回C
     31     char *chars = "XYZ";//查找失败
     32     char const *d = find_char(source,chars);
     33     if (!d)
     34         printf("查找失败\n");
     35     else
     36         printf("%c\n",*d);
     37     return 0;
     38 } 

    
    


    评论:我觉得这还不能令我满意,是不是有什么地方没有弄好,希望有知道的大婶指导指导

  • 相关阅读:
    【干货】如何5分钟内解决实时输入仿真(超简单)
    我们不生产bug,我们只是算法的搬运工——OO第一次作业(踩雷)总结
    OO助教总结
    oo第四次总结作业
    oo第三次总结性作业
    OO第二次总结性作业
    oo第四次作业
    C++学习记录二:
    长沙.NET社区之光
    课程总结
  • 原文地址:https://www.cnblogs.com/javaadu/p/11742716.html
Copyright © 2011-2022 走看看