繁体   English   中英

单个数组元素会衰减到指针吗?

[英]Does individual array elements decay to pointer?

我知道数组会衰减到指针。 结果,由于它的行为就像一个指针,因此实际上可以将其传递给带有需要内存地址的参数的函数,而无需使用“&”号。 例如:

char name[10];
scanf("%s", name);

是正确的。

但是,假设我只想填写“名称”数组的第一个元素,为什么不能将其写为

scanf("%c", name[0]);

但必须在“名称[0]”前面加上“&”号吗? 这是否意味着单个数组元素不会衰减到指针,并且不保存其单独的内存地址,而不是整个数组副本?

作为函数参数传递时, 数组会衰减到指向第一个元素的指针,而不是数组元素

引用C11 ,第§6.3.2.1/ p3章,左值,数组和函数指示符,( 重点是我的

除非它是sizeof运算符, _Alignof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则将类型为“ array of type”的表达式转换为带有键入“指向类型的指针” ,它指向数组对象的初始元素,而不是左值。

数组元素不是数组类型 ,数组变量是。 换句话说,毕竟数组名与a(ny)数组元素不同。

因此,即使作为函数参数传递,单个数组元素也不会衰减到所有对象的指针

问题在于char name[10]可以充当char* name ,这对于scanf是可以的,它期望第二个参数是一个指针 (内存中的地址)。 但是,当您写入name[0]您得到的是值而不是指针。

例如,如果name"Hello world"name[0] == 'H' 但是scanf一个指针。 因此,为了获取name[0]的地址,您需要编写scanf("%c", &name[0])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM