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

标签 c++ string pointers

将一个 char 传递给一个我理解的函数,有点(并使用指针进行操作 - 下面的代码交换 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[] 的 char 数组)然后像使用我不理解的指针一样进行操作(下面我想交换 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 类中的某些类型来完成它。我只是在学习,并且想在进入更高层次的东西之前了解这一点。我的理解有什么问题吗?

PS 我正在使用 g++

最佳答案

指针确实很棘手,要完全掌握它们,您大量阅读有关它们的书籍、教程等非常重要。

#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]。它是第一个元素的地址。

为了使交换工作,您需要指向字符串的指针

关于c++ - 如何通过函数内的指针操作 char* 或 char a[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26694826/

相关文章:

c++ - Mac OS X 上的 libdl.so 在哪里?

c++ - 在非成员函数中无效使用 'this'

c++ - boost::asio::strand && boost::lockfree::spsc_queue

vb.net - 如果字符串不为 null 或为空,则在字符串之间添加字符串

java - 在 Java 中写入 CSV 文件的子字符串问题

c# - SQLite in 10 UWP App Assertion Error (p->iForeGuard==(int)FOREGUARD);

c - 为什么我会收到 "assignment from incompatible pointer type"错误?

c# - 指针作为泛型 C#

c - 指向局部指针数组的全局指针

java - 处理字节数组产生奇怪结果的字符串构造函数