当前位置: 代码迷 >> C语言 >> 这次传的应该是地址了吧?怎么还是没返回值呢?
  详细解决方案

这次传的应该是地址了吧?怎么还是没返回值呢?

热度:122   发布时间:2007-07-07 16:02:53.0
5楼说的话很经典啊~~
----------------解决方案--------------------------------------------------------
*号的优先级比+=高多了,*P+=3肯定是值+3。
楼主的意思应该是地址+3,所以该成P+=3是可以的或者是指向指针的指针,如8楼所写的。
8楼,你的C学的应该很好,可以告送我你的QQ吗???
----------------解决方案--------------------------------------------------------
以下是引用maoguoqing在2007-7-7 13:17:56的发言:

汗一个先,先说2楼的程序,两个函数都是int的没有返回值,

如果如三楼所说,楼主需要的是地址加3,那么4楼就错了,*p+=3; 就是*p值加3

所以说,二楼的程序,最后b数组变成{'d','b','c','d'}, 所以最后会输出'd',

再说5楼,你说了一句很经典的话,其实只要把传任何东西都看成传值就好了

如果楼主是想地址+3,即使p指向b[3]的话,在2楼的基础上这样改就可以了。


void point(char**p) //用指向指针的指针
{
*p+=3; //*p还是一个指针,所以是指针+3,最后*p指向b[3]
}

int main()
{
char b[4]={'a','b','c','d'};
char *p=b;

point(&p);
printf("%c\n",*p);
printf("%c\n",b[0]);//b[0] = 'a' ,没有改变

return 0;
}


回6楼,你要知道[]比*的优先级高
回7楼,*P+=3 是值+,所以是d,p+3是地址+,所以是'e'.


学到东西,谢谢


----------------解决方案--------------------------------------------------------

太难了!
像这种通过值传递实现的东西可以改成RETURN()来实现吗?

我今天下午改了另一个程序,好像没用一样!
太难了!


----------------解决方案--------------------------------------------------------


不明白你自定义函数改变的是指针的地址?

还是指针所指向变量的值?
----------------解决方案--------------------------------------------------------
回复:(aaaasix)这次传的应该是地址了吧?怎么还是没...

int point(char*p)
{
*p+=3;
}

int main()
{
char b[4]={'a','b','c','d'};
char *p=b;

point(p);
printf("%c\n",*p);
}

我运行
输出 : d
是按地址传送 MAIN()调用point() ,potint()改变p地址指向 所以变成d
应该是这样


----------------解决方案--------------------------------------------------------
以下是引用rocketabc在2007-7-9 21:34:19的发言:

int point(char*p)
{
*p+=3;
}

int main()
{
char b[4]={'a','b','c','d'};
char *p=b;

point(p);
printf("%c\n",*p);
}

我运行
输出 : d
是按地址传送 MAIN()调用point() ,potint()改变p地址指向 所以变成d
应该是这样

函数point 是int类型,要返回值的吧?

我不知道你们用的是什么C语言,我用VC,代码是不是因该这样
#include <stdio.h>
void point(char *p)
{
*p += 3;
}

void main()
{
char b[4]={'a','b','c','d'};
char *p = b;

point (p);
printf ("%c\n", *p);
}


----------------解决方案--------------------------------------------------------
以下是引用rinboo在2007-7-21 0:01:44的发言:

函数point 是int类型,要返回值的吧?

我不知道你们用的是什么C语言,我用VC,代码是不是因该这样
#include <stdio.h>
void point(char *p)
{
*p += 3;
}

void main()
{
char b[4]={'a','b','c','d'};
char *p = b;

point (p);
printf ("%c\n", *p);
}

“什么C语言”是什么意思 vc只是编译器


----------------解决方案--------------------------------------------------------
8楼,学到很多。谢谢。

----------------解决方案--------------------------------------------------------
  相关解决方案