我觉得这样子做的话··输出的答案应该会是 s1变成bstring1 s2变成astring2才对, 可是调试的时候,发现那句话错了··请问是为什么?导致它们之间不能互相赋值?
代码如下:
using namespace std;
void exchange(char *a,char *b)
{
char c;
c = *a;
*a = *b; //为什么这句话会错
*b = c;
}
int main()
{
char *s1 = "atring 1";
char *s2 = "btring 2";
exchange(s1,s2);
cout << s1 << endl;
cout << s2 << endl;
return 0;
}
1
rrfeng 2015-04-02 11:07:21 +08:00
char *a; //a 是一个指针
char c = *a; // 将指针的指针丢给了 c &a 才是指针指向内容的引用。 |
2
sinxccc 2015-04-02 11:09:45 +08:00 1
*a 是指针指向的内容,而这个内容是个字符串常量,是不可以修改的。
|
3
jiang42 2015-04-02 11:33:44 +08:00 1
|
4
gdqyn 2015-04-02 11:50:30 +08:00
二楼说的对,如果把形参改为传入引用,然后交换指针指向的内容就可以了
void exchange(char *&a,char *&b) { char *c; c = a; a = b; //为什么这句话会错 b = c; } 用char *指向字符串会报警告(虽然程序员不在乎警告) 完整的 #include <iostream> using namespace std; void exchange(const char *&a, const char *&b) { const char *c; c = a; a = b; //为什么这句话会错 b = c; } int main() { const char *s1 = "atring 1"; const char *s2 = "btring 2"; exchange(s1,s2); cout << s1 << endl; cout << s2 << endl; return 0; } |
5
Andiry 2015-04-02 11:52:14 +08:00 1
s1和s2是常量指针,内容不能修改
|
6
cheng007 2015-04-02 12:02:54 +08:00
|
7
fliar 2015-04-02 12:14:43 +08:00 1
|
8
HxSeek OP 谢谢大家··我懂了
|
10
rrfeng 2015-04-02 12:42:20 +08:00
谢谢大家,我也懂了……
|
11
Comdex 2015-04-02 12:42:28 +08:00
帖子中的是c++吧?
|
14
blackboom 2015-04-02 13:16:19 +08:00 via Android
*a代表取值,*b也是,把常量赋值给常量,当然不可以
|
15
icedx 2015-04-02 13:29:54 +08:00 via Android
char* c;
c = a; a = b; b = c; C++ 少用指针 引用才是正途 |
16
ibudao 2015-04-02 13:29:57 +08:00
等号(=)左边的只能是左值,左值映射的是一段内存区域,而等号右边既可以为左值,也可以为右值。记住这个就行了。
|
17
hualuogeng 2015-04-02 13:38:29 +08:00
|
18
linux40 2015-04-02 20:06:58 +08:00
不要使用char *s1 = "atring 1",它只是声明了一个指针,但"xxx"是常量表达式,话说书上将常量和指针的时候都有写啊。。。
|
19
lirau 2015-04-03 00:49:51 +08:00 via Android
从这个问题可以看出本社区人员水平的参差不齐啊
|
20
lirau 2015-04-03 00:55:37 +08:00 via Android
|
21
danny200309 2015-04-03 08:05:07 +08:00
#include <stdio.h>
#include <iostream> using namespace std; void exchange(char *a, char *b) { char c[] = "ctring"; *c = *a; *a = *b; *b = *c; } int main() { char s1[] = "atring"; char s2[] = "btring"; exchange(s1,s2); std::cout << s1 << std::endl; std::cout << s2 << std::endl; return 0; } |