[英]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.