在C++中,我定义了一个char数组:
char miniAlphabet[] = {'A','B','C','D','E', '\0'};
我希望能够在不将数组传递到其他函数的情况下修改该数组的值。这时你需要使用指针,对吗?
所以我的问题是,如何正确地制作指向此 char 数组的指针。我是否仅需创建指向第一个元素的指针,并在想要修改值时遍历内存直到找到结尾字符?
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;
*p1
,您正在取消引用指针(访问指针指向的值),因此您正在获取第一个元素。char p2 = *p1;
。指向指针的指针将是 char **p3 = &p1;
。 - xanatoschar*
既是指向单个char
的指针,也是指向所谓的C字符串(以零结尾的字符串)的指针。这取决于你如何使用它。 - xanatosfunction changeArray(char[] myArray);
function changeArray(char* myArray);
你可以这样调用其中任意一个版本:
changeArray(miniAlphabet);
...or
changeArray(&(miniAlphabet[0]));
funcName(miniAlphabet);
并像这样“按引用”接收数组:
void funcName(char *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进行解引用操作会返回第一个元素的值。