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

C++ 指向C+中字符数组的指针+;,c++,pointers,C++,Pointers,我不明白以下几点: int main() { char ch[13] = "hello world"; function(ch); return 0; } void function( char *ch) { cout << ch; } intmain(){ char ch[13]=“你好,世界”; 功能(ch); 返回0; } void函数(char*ch){ cout当您直接或使用指向该数组的显式指针将数组传递到函数中时,它的功能已衰退

我不明白以下几点:

int main() {

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

    return 0;
}

void function( char *ch) {

    cout << ch;

}
intmain(){
char ch[13]=“你好,世界”;
功能(ch);
返回0;
}
void函数(char*ch){

cout当您直接或使用指向该数组的显式指针将数组传递到函数中时,它的功能已衰退,您无法对该项调用
sizeof()
,因为它实际上变成了指针

因此,完全有理由取消对它的引用,并调用

另请看以下示例:

#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;
}
#包括
使用名称空间std;
int-fun(字符*arr){
返回sizeof(arr);
}
int fun2(字符arr[3]){
return sizeof(arr);//这里也将数组名视为指向第一个元素的指针
}
int fun3(字符(&arr)[6]){
返回sizeof(arr);
}
int main(){
字符arr[]={'a','b','c','d','e','f'};

cout当您直接或使用指向该数组的显式指针将数组传递到函数中时,它的功能已衰退,您无法对该项调用
sizeof()
,因为它实际上变成了指针

因此,完全有理由取消对它的引用,并调用

另请看以下示例:

#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;
}
#包括
使用名称空间std;
int-fun(字符*arr){
返回sizeof(arr);
}
int fun2(字符arr[3]){
return sizeof(arr);//这里也将数组名视为指向第一个元素的指针
}
int fun3(字符(&arr)[6]){
返回sizeof(arr);
}
int main(){
字符arr[]={'a','b','c','d','e','f'};

cout正如有人在comments部分中所说的,取消对数组指针的区分的结果是一个纯字符

让我解释一下原因:
您的
ch
指针指示字符数组开头的地址,因此,当您调用
cout时,正如有人在注释部分所述,取消对数组指针的区分的结果是一个普通字符

让我解释一下原因:
您的
ch
指针指示字符数组开头的地址,因此当您调用
时,可能会因为对
char*
的延迟导致一个普通的
char
值。数组实际上只是指向第一个元素的指针。数组名称是指向第一个元素的指针。因为对
char*
的延迟会导致plain
char
value。数组实际上只是指向第一个元素的指针。数组名称是指向第一个元素的指针。谢谢!显然与cThanks中的outputstream printf相同!显然与c中的outputstream printf相同