Chinaunix首页 | 论坛 | 博客
  • 博客访问: 143116
  • 博文数量: 29
  • 博客积分: 151
  • 博客等级: 入伍新兵
  • 技术积分: 225
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-20 18:54
文章分类

全部博文(29)

文章存档

2012年(16)

2011年(13)

分类:

2012-06-01 00:49:20

原文地址:指针和指向指针的指针实例 作者:

实例:设计一个函数:void find1(char array[], char search, char *pa) 
要求:这个函数参数中的数组array是以0值为结束的字符串,要求在字符串array中查找字符是参数search 里的字符。如果找到,函数通过第三个参数pa返回值为array 字符串中第一个找到的字符的地址。如果没找到,则为pa为0。 

点击(此处)折叠或打开

  1. #include<stdio.h>

  2. void find1(char array[], char search, char *pa)
  3. {

  4.      int i;
  5.      for (i = 0; *(array + i) != 0; i++)
  6.      {
  7.       if ( *(array+i) == search)
  8.      {
  9.        pa = array + i;
  10.        break;
  11.      }
  12.       else if (*(array+i) == 0)
  13.      {
  14.        pa = 0;
  15.      break;
  16.      }

  17.      }
  18. }
  19.  
  20. main()
  21. {

  22.     char str[] = {"afsdfsdfdf\0"}; /* 待查找的字符串 */
  23.     char a = 'd'; /* 设置要查找的字符 */
  24.     char *p = 0; /* 如果查找到后指针 p 将指向字符串中查找到的第1个字符的地址。 */
  25.     find1(str, a, p); /* 调用函数以实现所要操作。 */
  26.     if (0 == p)
  27.     {
  28.         printf("没找到!\n"); /* 如果没找到则输出此句 */

  29.     } else

  30.      {
  31.      printf("找到了,p = %d\n", p); /* 如果找到则输出此句 */

  32.     }
  33.     return(0);
  34. }
唉!怎么输出的是:没有找到!而不是“找到了,……”。明明a值为'd',而 str字符串的第四个字符是'd’,应该找得到呀! 
原因解释:函数调用时会对每一个参数进行一个隐含的赋值操作。整个调用如下: 
     array = str; 
     search = a; 
     pa = p;       /* 请注意:以上三句是调用时隐含的动作。*/ 
明白了:哦!参数pa与参数search 的传递并没有什么不同,都是值传递嘛(小语:地址传递其实就是地址值传递嘛)!所以对形参变量pa值(当然值是一个地址值)的修改并不会改变实参变量p值,因此p的值并没有改变 (即p的指向并没有被改变)。 
改正代码(绿色字体处)后,完整代码如下:

点击(此处)折叠或打开

  1. #include<stdio.h>

  2. void find1(char array[], char search, char **ppa)
  3. {

  4.      int i;
  5.      for (i = 0; *(array + i) != 0; i++)
  6.      {
  7.       if ( *(array+i) == search)
  8.      {
  9.        *ppa = array + i;
  10.        break;
  11.      }
  12.       else if (*(array+i) == 0)
  13.      {
  14.        *ppa = 0;
  15.      break;
  16.      }

  17.      }
  18. }
  19.  
  20. main()
  21. {

  22.     char str[] = {"afsdfsdfdf\0"}; /* 待查找的字符串 */
  23.     char a = 'd'; /* 设置要查找的字符 */
  24.     char *p = 0; /* 如果查找到后指针 p 将指向字符串中查找到的第1个字符的地址。 */
  25.     find1(str, a, &p); /* 调用函数以实现所要操作。 */
  26.     if (0 == p)
  27.     {
  28.         printf("没找到!\n"); /* 如果没找到则输出此句 */

  29.     } else

  30.      {
  31.      printf("找到了,p = %d\n", p); /* 如果找到则输出此句 */

  32.     }
  33.     return(0);
  34. }
运行结果如下:
这里ppa指向指针p的地址,对*ppa的修改就是对p值的修改。 

阅读(1179) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~