将一个字符传递给我所理解的函数(并使用指针操作-下面的代码交换c1和c2中的值)。
#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,但是代码没有这样做)。
#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++
发布于 2014-11-02 00:56:16
指针确实很棘手,要完全掌握它们,重要的是要在书中、教程等中阅读大量关于它们的。
#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;
}在您的代码中,您不能交换cs1和cs2,因为它们不是真正的指针。它们是数组,如何将一个数组与另一个数组交换?
如果您说的是char hi[] = "TEST",那么hi和&hi[0]是一样的。这是第一个元素的地址。
为了使交换有效,您需要pointer to string。
发布于 2014-11-02 01:05:29
对于数组,必须复制字节才能交换数组的内容。
指针只是保存地址的变量。
当您尝试交换两个指针时,实际上是在复制
一个地址到另一个地址。
发布于 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
一个解决方案是将cs1和cs2声明为指针。为了用字符串文本初始化它们,它们应该是指向常量字符const char*的指针。详见克里斯·埃尔玛的回答。
https://stackoverflow.com/questions/26694826
复制相似问题