| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 521 人关注过本帖
标题:多重指标当参数?
只看楼主 加入收藏
lolmuta
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-8-31
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
多重指标当参数?
我是新手,
这是要设计一个函数能将字串清空。
我设计了二个函数ClearStr1与ClearStr2
但似乎ClearStr2出了点问题,请帮看一下,谢谢...
程序代码:
#include <stdio.h>
#include <stdlib.h>
void ClearStr1(char* c){
    *c='\0';
}
void ClearStr2(char **c){
    *(*c)='\0';
}
int main(){
    printf("test1\n");
    char d[]="test";
    printf("%s\n",d);
    ClearStr1(d);
    printf("%s\n",d);
    printf("test2\n");
    char e[]="test again";
    printf("%s\n",e);    
    ClearStr2(&e);    
    printf("%s\n",e);
    printf("GG");
    return 0;
}


compiler error:
stringtest.cpp: In function `int main()':
stringtest.cpp:18: error: cannot convert `char (*)[11]' to `char**' for argument `1' to `void ClearStr2(char**)'
2013-08-31 17:24
awisebird_
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:185
注 册:2013-7-6
收藏
得分:5 
对于数组而言a和&a的值是一样的,但是二者表示的意义有所区别,&a不能表示二维指针
参考:
http://blog.
2013-08-31 19:52
lolmuta
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-8-31
收藏
得分:0 
thanks awisebird_,its help alot, but if
改成这样了呢?
程序代码:
#include <stdio.h>
#include <stdlib.h>
void ClearStr1(char* c){
    *c='\0';
}
void ClearStr2(char **c){
    *(*c)='\0';
}
int main(){
    printf("test1\n");
    char d[]="test";
    printf("%s\n",d);
    ClearStr1(d);
    printf("%s\n",d);
    printf("test2\n");
    char *e="test again";
    printf("%s\n",e);    
    ClearStr2(&e);    
    printf("%s\n",e);
    printf("GG");
    return 0;
}



可编译,但无法执行,会显示程式无法运作
这次我有实验e与&e值不同
2013-08-31 20:34
awisebird_
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:185
注 册:2013-7-6
收藏
得分:0 
回复 3楼 lolmuta
ClearStr2(&e); //在执行这个函数的时候存在问题,
这个函数会对字符串常量"test again"执行“写”操作,字符串常量只允许“读”操作。
2013-09-01 09:26
lolmuta
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-8-31
收藏
得分:0 
改不了值,我改不同的位址,为何这样也不行呢?

程序代码:
#include <stdio.h>
#include <stdlib.h>
void ClearStr1(char* c){
     char mynull='\0';
     c=&mynull;
}
int main(){
    
    char d[]="test1";
    printf("%s\n",d);
    ClearStr1(d);
    printf("%s\n",d);//why cant ?
    
    
    printf("GG");
    system("pause");
    return 0;
}


本来以为二三下就搞定了...想不到这么难....
2013-09-01 11:08
awisebird_
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:185
注 册:2013-7-6
收藏
得分:0 
回复 5楼 lolmuta
void ClearStr1(char* c){
     char mynull='\0';
     c=&mynull;
}//从程序调试结果看,d 指针没有变。当这个函数执行完之后,mynull变量会释放,c应该还是会指向原mynull的地址,这样看来d指针应该是改变了,但是d没有改变。这里没有想明白,期待高手解答

[ 本帖最后由 awisebird_ 于 2013-9-1 16:02 编辑 ]
2013-09-01 15:49
awisebird_
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:185
注 册:2013-7-6
收藏
得分:0 
void ClearStr1(char* c){
     char mynull='\0';
     c=&mynull;
}//对于这个函数,当执行ClearStr1(d);这个语句的时候,将d赋给了c,子函数只是对指针c的操作, c改变了,而d没有改变。而且当这函数执行完之后,c会释放。
2013-09-01 16:30
米兰的大铁匠
Rank: 2
来 自:天外
等 级:论坛游民
帖 子:61
专家分:84
注 册:2013-7-16
收藏
得分:5 
void ClearStr2(char **c){
    *(*c)='\0';
例如
&p---用一级针接收
*p--用二级指针接收
2013-09-02 19:22
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:5 
这样的。。。。
#include <stdlib.h>
void ClearStr1(char* c){
    *c='\0';
}
void ClearStr2(char **c){
    *(*c)='\0';
}
int main(){
    printf("test1\n");
    char d[]="test";
    printf("%s\n",d);
    ClearStr1(d);
    printf("%s\n",d);
    printf("test2\n");
    char f[]="test again";
    char *e = f; //这里是基本语法的错误
    printf("%s\n",e);   
    ClearStr2(&e);   
    printf("%s\n",e);
    printf("GG");
    return 0;
}


其实原理一样!

[ 本帖最后由 liufashuai 于 2013-9-2 21:50 编辑 ]

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-09-02 21:48
jg658237
Rank: 7Rank: 7Rank: 7
来 自:青藏高原
等 级:黑侠
帖 子:224
专家分:529
注 册:2013-8-8
收藏
得分:5 
同意9楼

武功再高也怕菜刀.
2013-09-03 13:58
快速回复:多重指标当参数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045388 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved