gpt4 book ai didi

c - 关于将数组类型转换为指针

转载 作者:行者123 更新时间:2023-12-02 02:42:59 25 4
gpt4 key购买 nike

我想了解数组在代码中的确切位置转换为指针。例如:

void foo( int* pData, int len){}

int main(void){
char data[] = "Hello world";

foo( (int*)data, sizeof(data));

return 0;
}

我知道,如果将数组分配给指针,它就会衰减为指向第一个元素的指针。但是在上面的示例中,我先将数组数据类型转换为 int*,然后再将其传递给函数并将其分配给指针。指针的转换/衰减是否发生在类型转换点?如果是这样,是否可以说类型转换操作与使用赋值运算符对数组转换/衰减具有相同的效果? sizeof(data) 也等于地址长度或数组长度吗?

谢谢你的帮助!

最佳答案

C 中数组到指针的转换在 C standard 的第 6.3.2.1p3 节中有详细说明。 :

Except when it is the operand of the sizeof operator, the _Alignof operator, or the unary & operator, or is a string literal used to initialize an array, an expression that has type "array of type" is converted to an expression with type "pointer to type" that points to the initial element of the array object and is not an lvalue. If the array object has register storage class, the behavior is undefined.

这意味着数组在任何使用它的地方都会立即转换为指针,除了上面列出的三种情况。

所以将上面的应用到 (int*)datadata 是类型转换运算符的操作数。由于此运算符不是上面列出的运算符之一,因此此表达式中的 datachar [12] 转换为 char *,然后cast 将 char * 转换为 int *

此外,如上所述,当传递给 sizeof 时,数组不会转换。这意味着 sizeof(data) 的计算结果为 char [12] 的大小,即 12。

关于c - 关于将数组类型转换为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58043983/

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