指向字符串的指针...

云无心鸟知还 2018-10-08 10:17:05

#include<iostream>
using namespace std;
void swap(char *p1,char *p2)
{
char temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main ()
{
char *p="a";
char *q="b";
char a[2]="a";
char b[2]="b";

// swap(p,q);

swap(a,b);

cout<<a<<endl<<b<<endl<<p<<endl<<q;


return 0;
}



被注释掉的那句...
为啥指向字符串的指针不能用如上函数交换字符串的第一个字符?
不应该和字符串类似才对嘛 ?
这两个区别实在搞不懂...


...全文
246 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongwenjun 2018-10-08
  • 打赏
  • 举报
回复
#include<iostream>
#include<string.h>
using namespace std;
// 使用这个函数也可以 const 修饰调用的时候不修改指针指向的空间
// 只是交换指针指向的地址
void swap(const char* p1, const char* p2)
{
    const char* t = p1;
    p1 = p2;
    p2 = t;
}
int main()
{
    const char* p = "a";
    const char* q = "b";

    swap(p, q);
    cout  << p << endl << q;

    return 0;
}
云无心鸟知还 2018-10-08
  • 打赏
  • 举报
回复


引用 2 楼 hongwenjun 的回复:
#include<iostream>
#include<string.h>
using namespace std;
void swap(char* p1, char* p2)
{
char temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main()
{
char* p = new char[10]; // "a";
char* q = new char[10]; // "b";

strcpy(p, "a");
strcpy(q, "b");

swap(p, q);
cout << p << endl << q;

return 0;
}

如果使用指针,就应该使用 new 分配内存,这样指针指的不是常量,而可修改内存空间,就可以正确使用



基础没学好..一时间没转过弯...见笑了..
hongwenjun 2018-10-08
  • 打赏
  • 举报
回复
#include<iostream>
#include<string.h>
using namespace std;
void swap(char* p1, char* p2)
{
    char temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}
int main()
{
    char* p = new char[10]; //  "a";
    char* q = new char[10]; //  "b";

    strcpy(p, "a");
    strcpy(q, "b");

    swap(p, q);
    cout  << p << endl << q;

    return 0;
}
如果使用指针,就应该使用 new 分配内存,这样指针指的不是常量,而可修改内存空间,就可以正确使用
hongwenjun 2018-10-08
  • 打赏
  • 举报
回复
char *p="a"; char *q="b"; //这两个指针,指向的是常量,没有真实分配内存空间。 然后 函数里常量 修改,然后程序就关闭了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧