首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过函数内的指针操作char*或char a[]?

如何通过函数内的指针操作char*或char a[]?
EN

Stack Overflow用户
提问于 2014-11-02 00:40:48
回答 4查看 887关注 0票数 1

将一个字符传递给我所理解的函数(并使用指针操作-下面的代码交换c1和c2中的值)。

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main(){
void swap(char* ,char* );
char c1 = 'a', c2 = 'b';

cout << "c1 = " << c1 << ", c2 = " << c2 << endl;
cout << "Now we swap."  << endl;
swap(&c1, &c2);
cout << "c1 = " << c1 << ", c2 = " << c2 << endl;

return 0;
}
void swap(char* a,char* b)
{char temp = *a;
*a = *b;
*b= temp;}

但是一个字符串(其中一个字符串是一个字符数组,声明为char* a或char a[]),然后像使用我不理解的指针那样操作(下面我想交换cs1和cs2,但是代码没有这样做)。

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main(){
void swap(char*[] ,char*[] );
char cs1[] = "Hello", cs2[] = "Goodbye";

cout << "cs1 = " << cs1 << ", cs2 = " << cs2 << endl;
cout << "Now we swap."  << endl;
swap(&cs1, &cs2);
cout << "cs1 = " << cs1 << ", c2 = " << cs2 << endl;

return 0;
}

void swap(char* a[],char* b[])
{char* temp = *a;
*a = *b;
*b= temp;}

我希望使用这些基本类型,而不是String类中的某些内容。我只是在学习,在我进入更高层次的东西之前,我想了解这一点。我的理解有什么问题?

我使用的是g++

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-11-02 00:56:16

指针确实很棘手,要完全掌握它们,重要的是要在书中、教程等中阅读大量关于它们的。

代码语言:javascript
复制
#include <iostream>
using namespace std;

void swap(const char** , const char** );

int main(){

const char* cs1 = "Hello";
const char* cs2 = "Bye";

cout << "cs1 = " << cs1 << ", cs2 = " << cs2 << endl;
cout << "Now we swap."  << endl;
swap(&cs1, &cs2);
cout << "cs1 = " << cs1 << ", c2 = " << cs2 << endl;

return 0;
}

void swap(const char** a, const char** b)
{
   const char* temp = *a;
  *a = *b;
  *b= temp;
}

在您的代码中,您不能交换cs1cs2,因为它们不是真正的指针。它们是数组,如何将一个数组与另一个数组交换?

如果您说的是char hi[] = "TEST",那么hi&hi[0]是一样的。这是第一个元素的地址。

为了使交换有效,您需要pointer to string

票数 2
EN

Stack Overflow用户

发布于 2014-11-02 01:05:29

对于数组,必须复制字节才能交换数组的内容。

指针只是保存地址的变量。

当您尝试交换两个指针时,实际上是在复制

一个地址到另一个地址。

票数 0
EN

Stack Overflow用户

发布于 2014-11-02 01:13:20

当你写

char cs1[] = "Hello",cs2[] =“再见”;

您正在隐式声明cs1是一个char[6],一个由6个字符组成的数组。从原理上讲,是H,e,l,l,o,0。同样,cs2是一个char[8]。这是不同的类型!如果您可以交换这两个数组的值,那么新值应该是什么?cs1是否是没有零终止的cs2:G,o,o,d,b的截断版本?还是应该是G,o,o,d,\0?cs2应该是零填充: H,e,l,l,o,\0,\0,\0?还是可以让最后两个字符保持原来的样子: H,e,l,l,o,\0,e,\0

一个解决方案是将cs1cs2声明为指针。为了用字符串文本初始化它们,它们应该是指向常量字符const char*的指针。详见克里斯·埃尔玛的回答。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26694826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档