当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 指针的参数很奇怪没有作用,谁来帮我研究研究
帖子发表于 : 2007-11-27 1:24 
头像

注册: 2007-10-26 9:37
帖子: 61
送出感谢: 0 次
接收感谢: 0 次
代码:
#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);  //这里输出倒叙的字符串,正确的
 
}


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-11-27 2:26 

注册: 2006-03-19 18:25
帖子: 89
地址: FZ->TJ->PEK->AMS->MTL
送出感谢: 0 次
接收感谢: 0 次
三个错误

第一,你这里还是按值传递,而不是按指针(引用传递)。你传入一个指针,试图改变该指针的值(即试图使其指向另外的地址),这就是按值传递的概念。要想改为按指针(引用)传递的机制,就要用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


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-11-27 10:20 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
p是一个指针啊。没实际的内存申请的地址区间的。
"Hello World"位于代码段。相当于位于ROM区间。


_________________
● 鸣学


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-11-28 0:39 
头像

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


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-11-28 0:39 
头像

注册: 2007-10-26 9:37
帖子: 61
送出感谢: 0 次
接收感谢: 0 次
错了是2楼3楼的呵呵


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-11-28 1:32 

注册: 2007-04-04 15:56
帖子: 277
送出感谢: 0 次
接收感谢: 0 次
指针 函数传递是值传递 函数里面的指针是stack量 ~~


_________________
珍爱生命 请使用N卡


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-12-15 14:50 

注册: 2007-02-09 20:00
帖子: 7
送出感谢: 0 次
接收感谢: 0 次
char p []= {"Hello World"};


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译