gpt4 book ai didi

c - 当数组在c中隐式转换为指针时

转载 作者:行者123 更新时间:2023-11-30 18:31:33 24 4
gpt4 key购买 nike

我经常听说数组会隐式转换为指针,但是如何以及何时需要。字符串也隐式转换为指针吗?我听到的一个更常见的词是数组是指针的十年,所以它何时以及如何发生请显示编程示例。

最佳答案

来自horse's mouth :

6.3.2.1 Lvalues, arrays, and function designators
...
3 Except when it is the operand of the sizeof operator, the _Alignof operator, or theunary & operator, or is a string literal used to initialize an array, an expression that hastype ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that pointsto the initial element of the array object and is not an lvalue. If the array object hasregister storage class, the behavior is undefined.

给出以下代码:

char foo[]="This is a test";

printf( "Contents of foo = \"%s\"\n", foo ); // prints "This is a test"
printf( "Value of foo = %p\n", (void *) foo ); // prints address of first element
printf( "Value of &foo = %p\n", (void *) &foo ); // prints address of array
printf( "Size of foo = %zu\n", sizeof foo ); // prints number of bytes used
// by foo

表达式的类型 foo是“char 的 15 元素数组”。前两个printf调用,表达式 foo不是 sizeof 的操作数或一元 &运算符,因此转换为“指向 char 的指针”类型的表达式,其值为数组中第一个元素的地址;该指针值被传递给 printf

第三个printf调用,表达式 foo是一元 & 的操作数运算符,因此转换规则不适用;表达式 &foo 的类型是“指向 15 元素数组 char 的指针”。最后两行将打印相同的值(数组的地址与数组第一个元素的地址相同),但类型不同。

最后printf调用,表达式 foosizeof 的操作数运算符,因此转换规则不适用;表达式 sizeof foo 的结果是分配给数组的总字节数 (15)。

请注意,foo 指定的对象是一个数组,而不是一个指针;除了数组元素本身之外,没有为指针对象留出存储空间。

关于c - 当数组在c中隐式转换为指针时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21918510/

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