C++,创建一个指向char数组的指针

Jam*_* MV 7 c++ pointers

在C++中,我有一个char数组定义为:

char miniAlphabet[] = {'A','B','C','D','E', '\0'};
Run Code Online (Sandbox Code Playgroud)

我想从其他函数修改此数组的值,而不将其传递给这些函数.这是你使用指针的地方吗?

所以我的问题是制作指向这个char数组的指针的正确方法是什么.我只是制作一个指向第一个元素的指针,然后当我想修改值时,我逐步通过内存直到我点击结束字符?

xan*_*tos 17

char miniAlphabet[] = {'A','B','C','D','E', '\0'};
Run Code Online (Sandbox Code Playgroud)

这些是等价的.

char *p1 = miniAlphabet;

char *p2 = &(miniAlphabet[0]);
Run Code Online (Sandbox Code Playgroud)

请注意,()对于运算符的优先级来说,它们是无用的

char *p3 = &miniAlphabet[0];
Run Code Online (Sandbox Code Playgroud)

在C/C++中,数组的名称是指向数组的第一个元素的指针.

然后你可以使用指针的数学做一些魔术......

这将指向第二个元素:

char *p4 = &miniAlphabet[0] + 1;
Run Code Online (Sandbox Code Playgroud)

喜欢

char *p5 = &miniAlphabet[1];
Run Code Online (Sandbox Code Playgroud)

要么

char *p6 = miniAlphabet + 1;
Run Code Online (Sandbox Code Playgroud)

  • 你好,我有一个简单的问题。当您执行 char *p1 = miniAlphabet 时,p1 现在存储数组第一个元素的地址。为什么当我们执行 cout << p1 << endl 时,我们得到整个 char 数组(在本例中为 ABCDE)而不是第一个元素的地址? (2认同)
  • @DannyBrown 因为 *cout* 的创建者决定这样做。它甚至可以总是为任何 char* 指针写“hello world”,但这是愚蠢的。如果您从事文本编写行业,最明智的做法是将 char* 打印为字符串。如果要打印指针地址,请执行 *<< static_cast<void*>(p1)* (2认同)