C语言中的类型衰变

西街长安
2023-06-23 / 1 评论 / 82 阅读 / 正在检测是否收录...

类型衰变(type decay)是指在特定情况下,数组作为函数参数传递时会自动转换为指向数组首个元素的指针类型。

在C语言中,当你将数组作为函数参数传递时,数组的名称会自动转换为指向数组首个元素的指针。这意味着在函数内部,你将看到一个指针,而不是原始的数组。这种转换称为类型衰变。

类型衰变的情况包括:

  1. 将数组作为函数参数传递。
  2. 将数组赋值给指针变量。
  3. 将数组作为表达式的一部分参与运算。

例如,考虑以下代码片段:

void printArray(int arr[], int size) {
    // 函数内部使用指针访问数组
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
}

int main() {
    int myArray[] = {1, 2, 3, 4, 5};

    // 将数组作为参数传递给函数
    printArray(myArray, 5);

    // 数组赋值给指针变量
    int* ptr = myArray;

    // 数组作为表达式的一部分
    int value = *(myArray + 2);

    return 0;
}

在上述示例中,myArray 数组在函数调用、赋值和表达式中都发生了类型衰变。在函数 printArray 中,arr 参数被自动转换为指向 myArray 首个元素的指针,而不是一个完整的数组。同样地,将 myArray 赋值给指针变量 ptr,以及在表达式 *(myArray + 2) 中使用数组,都会发生类型衰变。

类型衰变的结果是,在函数内部或其他上下文中,你无法通过 sizeof 运算符获取数组的真实大小,因为此时数组已经被转换为指针类型。要想在函数中获取数组的大小,你需要将数组的大小作为额外的参数传递给函数。

2

评论 (1)

取消
  1. 头像
    nx
    Android · Google Chrome

    表情

    回复