指针的一个应用

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


一、
void find0(char array[], char search, char *pa);
void find0(char array[], char search, char *pa)
{
int i;
for (i = 0; *(array + i) != 0; i++)
{
if ( *(array+i) == search)
{
pa = array + i;
break;
}
else if (*(array+i) == 0)
{
pa = 0;
break;
}
}
}

void main()
{
char str[] = {"afsdfsdfdf\0"}; /* 待查找的字符串 */
char a = 'd'; /* 设置要查找的字符 */
char *p = 0; /* 如果查找到后指针p将指向字符串中查找到的第1个字符的地址。 */
find0(str, a, p); /* 调用函数以实现所要操作。 */
if (0 == p)
{
printf("没找到!\n"); /* 如果没找到则输出此句 */
}
else
{
printf("找到了,p = %d\r\n", p); /* 如果找到则输出此句 */
printf("找到了,p = %s", p); /* 如果找到则输出此句 */
}

}

隐含了
array = str;
search = a;
pa = p; /* 请注意:以上三句是调用时隐含的动作。*/

/*哦!参数pa与参数search的传递并没有什么不同,
都是值传递嘛(小语:地址传递其实就是地址值传递嘛)!
所以对形参变量pa值(当然值是一个地址值)的修改并不会改变实参变量p值,
因此p的值并没有改变(即p的指向并没有被改变)。*/

二、

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

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

}


隐含了
array = str;
search = a;
pa = &p; /* 请注意:以上三句是调用时隐含的动作。*/

ok 了
一句话,你是把地址传进去了吗
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值