首页 新闻 会员 周边

c语言中的指针问题

0
悬赏园豆:5 [已解决问题] 解决于 2016-03-23 12:55

代码如下:

#include<stdio.h>
void Swap(char*r,char*s){
char p;
p=*r;
*r=*s;
*s=p;
}
main(){
char*s1="abc";
char*s2="123";
Swap(s1,s2);
printf("%c,%c",*s1,*s2);
}

代码执行不了,在调试的时候执行到*r=*s;就执行不下去了,这是为什么,哪位大神帮帮忙

 

lzj123的主页 lzj123 | 初学一级 | 园豆:158
提问于:2016-03-22 22:20
< >
分享
最佳答案
0
#include <stdio.h>

void Swap(char **r, char **s) {
    char *p;
    p = *r;
    *r = *s;
    *s = p;
}

int main()
{
    char *s1 = "abc";
    char *s2 = "123";
    Swap(&s1, &s2);
    printf("%s,%s", s1, s2);
    return 0;
}

 

收获园豆:5
jello chen | 大侠五级 |园豆:7336 | 2016-03-23 00:06

你这种还是值传递啊!能运行?

lzj123 | 园豆:158 (初学一级) | 2016-03-23 10:32

@lzj123: 贴过去试试不就知道了么

jello chen | 园豆:7336 (大侠五级) | 2016-03-23 10:40

@jello chen: 为啥我的就不行?

lzj123 | 园豆:158 (初学一级) | 2016-03-23 10:43

@lzj123: 报错么,什么错

jello chen | 园豆:7336 (大侠五级) | 2016-03-23 11:12

@jello chen: 没有做任何操作,说了你这个程序等于值传递,方法执行完变量就释放了

lzj123 | 园豆:158 (初学一级) | 2016-03-23 12:20

@lzj123: 

#include <stdio.h>
void Swap(char *r,char *s){
char p;
p = *r;
*r = *s;
*s = p;
}

main(){
int s1 = 2;
int s2 = 5;
int *i=&s1,*j=&s2;
Swap(i,j);
printf("%d,%d\n",s1,s2);
}

这个程序是可以运行的

lzj123 | 园豆:158 (初学一级) | 2016-03-23 12:29

@lzj123: 我机器上没问题

jello chen | 园豆:7336 (大侠五级) | 2016-03-23 12:52

@jello chen: 谢谢了,我知道什么问题了!

lzj123 | 园豆:158 (初学一级) | 2016-03-23 12:54

@jello chen: 你这个只是char的Swap呀,你本来不是想要的是string或者说是char *的Swap么

jello chen | 园豆:7336 (大侠五级) | 2016-03-23 12:56

@lzj123: 

普通char指针是不能指向常量字符串的,并且因为“abc”“123”是常量字符串,也不能被修改。

要想操作字符串,就应该给它们分配实际的存储空间,所以应把 s1 和 s2 声明为字符数组:

lzj123 | 园豆:158 (初学一级) | 2016-03-23 12:56

@lzj123: what?

jello chen | 园豆:7336 (大侠五级) | 2016-03-23 12:56

@jello chen: 就是上面这个问题,看懂了没

lzj123 | 园豆:158 (初学一级) | 2016-03-23 12:57

@lzj123: 

#include <stdio.h>
void Swap(char *r,char *s){
char p;
p = *r;
*r = *s;
*s = p;
}

main(){
char s1[] = "abc";
char s2[] = "123";
char *i=s1,*j=s2;
int k;
Swap(i,j);
for(k=0;k<3;k++){
printf("%c",s1[k]);
}
printf("\n");
for(k=0;k<3;k++){
printf("%c",s2[k]);
}
printf("\n");
}

这是正确代码

lzj123 | 园豆:158 (初学一级) | 2016-03-23 12:58

@lzj123: 我以为你明白这个,汗

jello chen | 园豆:7336 (大侠五级) | 2016-03-23 12:59

@jello chen: 不管怎样,谢谢你的答复

lzj123 | 园豆:158 (初学一级) | 2016-03-23 13:00
其他回答(1)
0

*r = s 这一句是错误的,r表达式不能作为左值

Αντίο | 园豆:202 (菜鸟二级) | 2021-06-14 12:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册