参考博主:https://blog.youkuaiyun.com/liuweiyuxiang/article/details/84769438
看一下 下面的代码:
#include<stdio.h>
int find(char *s, char src, char *rt)//从s中查询出src字符所在的位置并在rt中返回。
{
int i = 0;
while (*(s + i))
{
if (*(s + i) == src)//只会出现一次满足条件,此时将此地址给*rt,即p
{
rt = s + i;//这里修改了p的指向
}
i++;
}
return 0;
}
int main(void)
{
char a[10] = "zhuyujia";
char *p = NULL;
printf("%p", p);
find(a, 'y', p);//改变p的指向,在子函数中实现
printf("%s", p);
printf("%p", p);
getchar(); getchar();
return 0;
}
输出:00000000(null)00000000
#include<stdio.h>
char* find(char *s, char src, char *rt)//从s中查询出src字符所在的位置并在rt中返回。
{
int i = 0;
while (*(s + i))
{
if (*(s + i) == src)//只会出现一次满足条件,此时将此地址给*rt,即p
{
rt = s + i;//这里修改了p的指向
}
i++;
}
return rt;
}
int main(void)
{
char a[10] = "zhuyujia";
char *p = NULL;
printf("%p", p);
p=find(a, 'y', p);//改变p的指向,在子函数中实现
printf("%s", p);
printf("%p", p);
getchar(); getchar();
return 0;
}
输出:00000000yujia00B3FC23
第一段代码 由传入的是指针(地址),虽然在程序中改变了这个地址 但因为这个指针式局部变量 (形参)他不会改变实参的值(地址)所以输出依然式0;
第二个 我直接返回了形参的值,是没问题的;
#include<stdio.h>
int find(char *s, char src, char **rt)//从s中查询出src字符所在的位置并在rt中返回。
{
int i = 0;
while (*(s + i))
{
if (*(s + i) == src)//只会出现一次满足条件,此时将此地址给*rt,即p
{
*rt = s + i;//这里修改了p的指向
}
i++;
}
return 0;
}
int main(void)
{
char a[10] = "zhuyujia";
char *p = NULL;
printf("%p", p);
find(a, 'y', &p);//改变p的指向,在子函数中实现
printf("%s", p);
printf("%p", p);
getchar(); getchar();
return 0;
}
这一段代码 我传入的是 指针变量的地址
void swap(int a) {
a = 10;
}
void swap(int *a) {
*a = 10;
}
int main(void)
{
int a = 0;
int* p = &a;
swap(a);
printf("%d", a);
swap(p);
printf("%d", a);
getchar();
}
道理其实和我这段代码的到理是一样的,指针也是变量 也需要通过地址来改变;
总的来说 如果你传入的参数是指针 并且你希望改变这个 指针的地址 那么 就考虑 指针的指针;
发现还是有点混淆:
#include <iostream>
using namespace std;
void print(const char **str)
{
++*str;
cout << *str << endl;
}
int main()
{
const char *arr[] = { "hello", "world", "c++" };
const char **ptr;
ptr = arr;
print(ptr);
return 0;
}
输出的是ello;
#include <iostream>
using namespace std;
void print(const char **str)
{
++str;
cout << *str << endl;
}
int main()
{
const char *arr[] = { "hello", "world", "c++" };
const char **ptr;
ptr = arr;
print(ptr);
return 0;
}
输出的是world;
看看怎么理解 arr其实就是二级指针 {。。。}里面的是二维 数据 arr++处理的是第二 维的数组 *arr 是第一维的数组啦!