繁体   English   中英

指向C ++中的字符数组的指针

[英]Pointer to character array in C++

我不理解以下内容:

int main() {

    char ch[13] = "hello world";
    function(ch);

    return 0;
}

void function( char *ch) {

    cout << ch;

}

输出“ hello world”。 但是,如果我不喜欢指针ch,则程序将输出第一个字母,即“ h”。 我不知道为什么。

cout << *ch;

正如有人在注释部分中指出的那样,取消对数组指针的引用的结果是纯字符。

让我解释一下原因:您的ch指针指示char数组的开始地址,因此,当您调用cout<<ch ,它将在屏幕上显示从ch地址开始的内存中所有内容,并依次进行直到第一个NULL值出现并停止。 当调用cout<<*ch ,它将获取您存储在数组的起始地址h

取消引用意味着您可以从特定地址获取价值。

希望能有所帮助! :)

当您将数组直接或直接使用指向该数组的显式指针传递给函数时 ,它的功能 sizeof() ,因为您实际上无法成为指针 ,因此无法调用该项目的sizeof()

因此,取消引用并调用流<<的适当重载是完全合理的。

更多信息: https : //stackoverflow.com/a/1461449/1938163

还请看以下示例:

#include <iostream>
using namespace std;

int fun(char *arr) {
    return sizeof(arr);
}

int fun2(char arr[3]) {
    return sizeof(arr); // It's treating the array name as a pointer to the first element here too
}

int fun3(char (&arr)[6]) {
    return sizeof(arr);
}


int main() {

    char arr[] = {'a','b','c', 'd', 'e', 'f'};

    cout << fun(arr); // Returns 4, it's giving you the size of the pointer

    cout << endl << fun2(arr); // Returns 4, see comment

    cout << endl << fun3(arr); // Returns 6, that's right!

    return 0;
}

或现场试用: http : //ideone.com/U3qRTo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM