指针的参数很奇怪没有作用,谁来帮我研究研究

C、C++和Java语言
回复
头像
yangyang123
帖子: 61
注册时间: 2007-10-26 9:37
送出感谢: 0
接收感谢: 0

指针的参数很奇怪没有作用,谁来帮我研究研究

#1

帖子 yangyang123 » 2007-11-27 1:24

代码: 全选

#include<stdio.h>
#include<string.h>
void fun(char * des,int n);
int main()
{
    char *p = "Hello World";
    fun(p,strlen(p));
    puts(p);  //到这里就不对了,还是Hello World
    return 0;
}
void fun(char * des,int n)
{
    char temp[n];
    int i,j;
    for(i = n-1,j = 0; i > 0,j< n; i--,j++)
    {
        temp[j] = des[i];
    }
    temp[n] = '\0';
    des = temp;
    puts(des);  //这里输出倒叙的字符串,正确的
 
}
vupiggy
帖子: 89
注册时间: 2006-03-19 18:25
来自: FZ->TJ->PEK->AMS->MTL
送出感谢: 0
接收感谢: 0

#2

帖子 vupiggy » 2007-11-27 2:26

三个错误

第一,你这里还是按值传递,而不是按指针(引用传递)。你传入一个指针,试图改变该指针的值(即试图使其指向另外的地址),这就是按值传递的概念。要想改为按指针(引用)传递的机制,就要用char **。像下面这样:

代码: 全选

#include<stdio.h>
#include<string.h>

void fun(char **des,int n);

int main()
{
    char *p = "Hello World";
    fun(&p,strlen(p));
    puts(p);  // 这里仍然是不对的,虽然p指向已经改了,但是指向了垃圾!!!
    return 0;
}

void fun(char **des,int n)
{
    char temp[n];
    int i,j;
   
    for(i = n-1,j = 0; i > 0,j< n; i--,j++)
    {
      temp[j] = (*des)[i];
    }
    temp[n] = '\0';
    *des = temp;
    puts(*des);
 
}


第二:你的temp[n]是在fun函数的栈里的,你将des = temp,即使你用了按指针(引用传递),成功地改变了实参p的指向,但是很不幸,它指向了一块垃圾内存(被释放的栈空间)。也就是说,上面的代码虽然解决了你实参p没有被修改的问题,却引入了新的问题,怎么解决,作为习题;)

第三:这个问题不应该拿出来问,回去看几遍书,自己调试。我不认为几十行的程序的调试是不可解决的,即使你是个新新手。

good luck
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#3

帖子 eexpress » 2007-11-27 10:20

p是一个指针啊。没实际的内存申请的地址区间的。
"Hello World"位于代码段。相当于位于ROM区间。
● 鸣学
头像
yangyang123
帖子: 61
注册时间: 2007-10-26 9:37
送出感谢: 0
接收感谢: 0

#4

帖子 yangyang123 » 2007-11-28 0:39

谢谢一楼二楼的提醒
我忘了变量的作用域了
我现在换了一种写法,但还有点小问题
最近忙死了,还是洗洗 睡觉吧
爱好和工作不可兼得阿阿阿 :roll:
头像
yangyang123
帖子: 61
注册时间: 2007-10-26 9:37
送出感谢: 0
接收感谢: 0

#5

帖子 yangyang123 » 2007-11-28 0:39

错了是2楼3楼的呵呵
biosxjj
帖子: 277
注册时间: 2007-04-04 15:56
送出感谢: 0
接收感谢: 0

#6

帖子 biosxjj » 2007-11-28 1:32

指针 函数传递是值传递 函数里面的指针是stack量 ~~
珍爱生命 请使用N卡
wangyuhu2002
帖子: 7
注册时间: 2007-02-09 20:00
送出感谢: 0
接收感谢: 0

#7

帖子 wangyuhu2002 » 2007-12-15 14:50

char p []= {"Hello World"};
回复

回到 “C/C++/Java”