
【计】 array name argument
【计】 array
【化】 array
express; fame; famous; first name; firstname; forename; reputation
【法】 praenomen
become; change
【医】 meta-; pecilo-; poecil-; poikilo-
basic; buck; chief; dollar; first; Yuan
【经】 dollar; yuan
在计算机编程领域(特别是C/C++语言中),“数组名变元”指将数组名称作为实际参数(argument)传递给函数的行为。此时传递的并非整个数组的副本,而是数组首元素的地址(指针),这一过程涉及数组到指针的隐式转换(称为“退化”)。以下是关键解释:
数组名的本质
在表达式中,数组名通常代表数组首元素的地址(常量指针)。例如 int arr
中,arr
等价于 &arr
,类型为 int*
(指向整型的指针)。
变元(Argument)的角色
当数组名作为函数参数传递时,编译器将其转换为指针。函数内部接收的是指针而非完整数组,因此无法直接通过形参获取数组长度。
来源:Brian Kernighan & Dennis Ritchie, 《The C Programming Language》 5.3节
语法等效性
函数形参声明以下两种形式等价:
void func(int *ptr); // 指针形式
void func(int arr[]);// 数组形式(编译器视为指针)
两者均接收指针,后者仅为提高可读性。
来源:ISO/IEC 9899:2018 (C17标准) §6.7.6.3
长度信息丢失
由于传递的是指针,函数内无法通过 sizeof(arr)
获取原数组长度(结果仅为指针大小)。需额外传递长度参数:
void process_array(int *arr, size_t len);
数组名作为变元时,发生地址值拷贝。以下代码演示其行为:
#include <stdio.h>
void check_size(int param[]) {
printf("In function: sizeof(param) = %zu
", sizeof(param)); // 输出指针大小(如8字节)
}
int main {
int arr;
printf("In main: sizeof(arr) = %zu
", sizeof(arr)); // 输出数组总大小(如40字节)
check_size(arr); // 传递数组名,实际传递 arr 的地址
return 0;
}
来源:Stanford CS107课程讲义《Arrays and Pointers》
C语言标准文档
ISO/IEC 9899 标准明确数组到指针的转换规则(§6.3.2.1)。
ISO C17标准草案 (官方文档需购买)
经典教材
《C程序设计语言》(K&R)第2版详细讨论数组与指针的关系(第5章)。
技术社区
Stack Overflow 高票回答解析数组名传递机制:
How do I use arrays in C++? (需注意C与C++差异)
void func(int (&arr); // 必须匹配长度为10的整型数组
int arr[]
)。“数组名变元”这一表述需要从编程中的数组名和变元(参数)两个概念来综合理解。以下是分点解释:
数组名的本质
int arr
中,arr
在表达式里通常被转换为指向arr
的指针(类型为int*
),但在sizeof(arr)
或&arr
时,它表示整个数组的存储空间或地址。变元(参数)的定义
void func(int arr[])
等价于void func(int* arr)
。数组名作为变元的行为
sizeof(arr)
获取原数组长度,需额外传递长度参数。示例:
void printArray(int* arr, int size) { // arr是数组名变元,实际为指针
for (int i=0; i<size; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int nums = {1, 2, 3};
printArray(nums, 3); // 数组名nums作为变元传递,等效于传递&nums
}
数组名作为变元时,本质是传递指针,函数通过该指针操作原数组,但需注意数组长度需额外处理。这一机制在C/C++等语言中常见,体现了数组与指针的紧密关联。
阿米巴细菌属避雷装置不辞而别草达减打印队列电导滴注法恶性腹股沟淋巴结炎发展分支行业肺嗜曙红细胞增多骨干性续连症家臣降序短语建设费经常项目收支平衡堇色杆菌积雨云卡他今那吐根冷混合裂隙的氯化氯代胆碱氯林肯霉素胚神经弓噻唑啉┹化合物三相电路删除能力特殊打印函数投照技术