使用指向指针的指针改变一个传递进来的指针的指向!

本文介绍了一个使用指针实现的字符串搜索函数。该函数能在指定的字符串中查找特定字符,并通过双层指针返回该字符的位置。如果未找到字符,则返回空指针。

/*对指向指针的指针的使用,作用:改变传递进去的指针的指向*/

//这个函数参数中的数组array是以0值为结束的字符串,要求在字符串array中查找字符是参数search里的字符。
//如果找到,函数通过第三个参数(ppa)返回值为array字符串中第一个找到的字符的地址。如果没找到,则为ppa为0。
#include <stdio.h>
#include <stdlib.h>

void find2( char array[], char search, char ** ppa)
{
 int i;
 for (i=0;*(array+i)!=0;i++)
 {
  if (*(array+i)==search)
  {
   *ppa=array+i;
    break;
  }
  else if (*(array+i)==0)
  {
   *ppa=0;
   break;
  }
 }
}

void main()
{
 char str[]={"afsdfsdfdf/0"};  //待查找的字符串
 char a='d';   //设置要查找的字符
 /*想要在find2函数里改变 *p 指向的地址,find2里对应的参数必须为 **ppa 将*p的地址&p传递进去*/
 char * p=0;  //如果查找到后指针p将指向字符串中查找到的第一个字符的地址。
 find2(str,a,&p);  //调用函数以实现所要操作。
 if (0==p )
 {
  printf ("没找到!/n");//1.如果没找到则输出此句
 }
 else
 {
  printf("找到了,p=%c/n", *p);  //如果找到则输出此句
 }

在C++中,引用传递指针传递指向指针的指针是两种不同的参数传递方式,它们在功能、语义使用场景上存在显著区别。 ### 引用传递指针 引用传递指针是指将指针作为引用传递给函数。在这种情况下,函数接收的是原始指针一个别名,这意味着对函数内部指针所做的任何修改都会直接影响到原始指针。这种方式通常用于需要修改指针本身的情况,例如重新分配内存或改变指针指向的对象[^3]。 #### 示例代码 ```cpp void modifyPointer(int*& ptr) { ptr = new int(10); // 修改指针指向的新内存 } int main() { int* p = nullptr; modifyPointer(p); // p现在指向新分配的内存 delete p; return 0; } ``` ### 值传递指向指针的指针传递指向指针的指针则是将指针的地址作为参数传递给函数。这意味着函数接收到的是一个指向指针的指针,即`int**`。在这种情况下,函数可以通过解引用这个指针来修改原始指针内容。然而,如果函数内部改变了传入的指针地址(即`ptr`本身的值),这种变化不会影响到调用者中的原始指针,除非特别处理[^3]。 #### 示例代码 ```cpp void modifyPointer(int** ptr) { *ptr = new int(10); // 修改指针指向的新内存 } int main() { int* p = nullptr; modifyPointer(&p); // p现在指向新分配的内存 delete p; return 0; } ``` ### 区别总结 - **可变性**:引用传递允许直接修改原始指针,而值传递指向指针的指针则需要通过解引用来间接修改原始指针。 - **安全性与直观性**:引用传递更加直观且易于使用,因为它不需要额外的解引用步骤;而值传递指向指针的指针提供了更多的灵活性,但也增加了出错的可能性。 - **适用场景**:当只需要修改指针指向内容而不必更改指针本身时,可以使用普通的指针传递;若需要在函数内部动态改变指针本身的指向,则推荐使用引用传递或者传递指向指针的指针。 这些差异决定了在不同的情境下选择合适的方法以达到预期的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值