参考博主:https://blog.csdn.net/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 是第一维的数组啦!
本文深入探讨了C语言中指针的使用技巧,包括如何通过指针的指针改变实参地址,以及指针作为函数参数时的注意事项。通过具体代码示例,详细解释了指针变量与二级指针的区别,帮助读者理解指针的复杂操作。
&spm=1001.2101.3001.5002&articleId=107284297&d=1&t=3&u=401d4ba4d6b34a71a744fd1f6fed60ee)
3235

被折叠的 条评论
为什么被折叠?



