怎么通过子函数改变参数指向的地址
- C/C++ code
void p_add(unsigned char *pt){ pt = pt + 1;}int main(){ unsigned char s[3] = {1, 2, 3}; unsigned char *p; p = s; printf("p = %d\n", *p); p_add(p); printf("p = %d\n", *p); return 0;}
想让在main中执行完 p_add(p); 后, p 指向s[1], = 2。
上面这段代码显然不行,
- C/C++ code
unsigned char *p_add(unsigned char *pt){ pt = pt + 1; return pt;}int main(){ unsigned char s[3] = {1, 2, 3}; unsigned char *p; p = s; printf("p = %d\n", *p); p = p_add(p); printf("p = %d\n", *p); return 0;}
这个可行,但 p_add 的返回值我要作其它用途。
- C/C++ code
void p_add(unsigned char **pt){ unsigned char *pt1; pt1 = *pt; pt1 = pt1 + 1;}int main(){ unsigned char s[3] = {1, 2, 3}; unsigned char *p; p = s; printf("p = %d\n", *p); p_add(&p); printf("p = %d\n", *p); return 0;}
不行,同第一种效果相同。
怎么实现在不使用 全局变量 或 p_add返回值的情况下,通过p_add的参数将main中p向后指?
[解决办法]
- C/C++ code
#include<stdio.h>void p_add(unsigned char **pt){ unsigned char **pt1; pt1 = pt; *pt1 = *pt1 + 1;}int main(){ unsigned char s[3] = {1, 2, 3}; unsigned char *p; p = s; printf("p = %d\n", *p); p_add(&p); printf("p = %d\n", *p); return 0;}
[解决办法]
void p_add(unsigned char **pt)
{
(*pt)++;
}
int main()
{
unsigned char s[3] = {1, 2, 3};
unsigned char *p;
p = s;
printf("p = %d\n", *p);
p_add(&p);
printf("p = %d\n", *p);
return 0;
}