gpt4 book ai didi

c++ - 指针可以在函数调用期间转换为数组吗?

转载 作者:太空狗 更新时间:2023-10-29 23:48:46 25 4
gpt4 key购买 nike

考虑以下代码:

#include <iostream>
#include <typeinfo>

void use_pointer(int *ptr)
{
std::cout << typeid(ptr).name() << std::endl;
}

void use_array(int arr[])
{
std::cout << typeid(arr).name() << std::endl;
}

int main()
{
int *ptr = nullptr;
// std::cout << typeid(int *).name() << std::endl; // output: Pi
int arr[1];
// std::cout << typeid(int[]).name() << std::endl; // output: A_i

use_pointer(arr);
use_array(ptr);
}

使用 g++ 6.5.0 输出编译这个程序:

$ g++ -std=c++11 arrays_2.cpp -Wall
$ ./a.out

Pi
Pi

现在,当调用 use_pointer(arr)array is being decayed到一个指针。 (这样说对吗?“衰变”这个词对我来说是个新词。)

C++ 标准在 [conv.array#1] :

An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to a prvalue of type “pointer to T”. The temporary materialization conversion ([conv.rval]) is applied. The result is a pointer to the first element of the array.

我想我明白我的“int 数组”转换为“指向 int 的指针”。 (对吗?)

现在,调用 use_array(ptr) 时到底发生了什么。由于本例中的参数类型是 int 数组,“指向 int 的指针” 是否转换为 “int 数组”

非常感谢指向该标准的指针。

最佳答案

指针是指针,数组是数组。然而,数组自然退化为指向其第一个元素的指针。因此,当您将数组 arr 传递给您拥有的任何函数时,它将衰减为 &arr[0]

另请注意,在声明函数参数时,数组符号(如 int arr[])并不意味着它是一个数组,编译器仍将其转换为指针(即 int* arr).

关于从数组到指针的衰减,它不可能以相反的方式发生。一旦你有了一个指针,你所拥有的就是那个指针和它指向的单个元素。

关于c++ - 指针可以在函数调用期间转换为数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53363246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com