首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

如何通过子函数改变参数指向的地址

2012-09-02 
怎么通过子函数改变参数指向的地址C/C++ codevoid p_add(unsigned char *pt){pt pt + 1}int main(){uns

怎么通过子函数改变参数指向的地址

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;
}


热点排行