我觉得这样子做的话输出的答案应该会是 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 ![]() *a 是指针指向的内容,而这个内容是个字符串常量,是不可以修改的。 |
3 jiang42 2015-04-02 11:33:44 +08:00 ![]() |
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 ![]() s1和s2是常量指针,内容不能修改 |
6 cheng007 2015-04-02 12:02:54 +08:00 |
7 fliar 2015-04-02 12:14:43 +08:00 ![]() |
![]() | 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; } |