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 } 




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

原文地址:https://www.cnblogs.com/javaadu/p/11742716.html