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

时间:2012-03-12 15:55:19

标签: c++ pointers

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

char miniAlphabet[] = {'A','B','C','D','E', '\0'};

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

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

4 个答案:

答案 0 :(得分:16)

char miniAlphabet[] = {'A','B','C','D','E', '\0'};

这些是等效的。

char *p1 = miniAlphabet;

char *p2 = &(miniAlphabet[0]);

请注意,()对运算符的优先级没用,所以

char *p3 = &miniAlphabet[0];

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

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

这将指向第二个元素:

char *p4 = &miniAlphabet[0] + 1;

char *p5 = &miniAlphabet[1];

char *p6 = miniAlphabet + 1;

答案 1 :(得分:1)

数组在内存中的位置与其第一个元素的位置相同。例如,下面的两个函数签名都是等价的:

function changeArray(char[] myArray);
function changeArray(char* myArray);

您可以调用这样的版本:

changeArray(miniAlphabet);

...或

changeArray(&(miniAlphabet[0]));

答案 2 :(得分:1)

如果将数组传递给函数,则通过引用传递,因为数组变量实际上只是指向数组中第一个元素的地址的指针。所以你可以调用这样的函数:

funcName(miniAlphabet);

并通过引用接收数组:

void funcName(char *miniAlphabet) {
   ...
}

答案 3 :(得分:1)

简而言之,是的。创建数组时,miniAlphabet是指向您定义的大小和类型数组的指针。这也是指向第一个元素的指针。

您所建议的一个例子。

void foo(char *array)
{
    array[0] = 'z';
    array[2] = 'z';
}

...

char myArray[] = { 'a', 'b', 'c'};
foo(myArray);
//myArray now equals  {'z', 'b', 'z'}

另外值得注意的是,取消引用myArray会在第一个元素中为您提供值。