导读:本期聚焦于小伙伴创作的《指针和数组有什么关系 数组名作为指针使用的注意事项》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《指针和数组有什么关系 数组名作为指针使用的注意事项》有用,将其分享出去将是对创作者最好的鼓励。

在C语言里,指针和数组经常一起出现,很多人觉得数组名就是指针,但其实它们并不是一回事。数组是一段连续的内存空间,而指针是一个保存地址的变量。只是在大多数表达式里,数组名会隐式转换成指向数组首元素的指针,这才让我们能像用指针一样用数组名。

指针和数组有什么关系 数组名作为指针使用的注意事项

指针和数组的本质关系

声明一个数组时,编译器会分配固定大小的内存。声明一个指针时,只分配一个地址变量。看下面例子:

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *p = arr; // 数组名arr转换为指向首元素的指针
    printf("%d %dn", arr[0], p[0]); // 都能访问第一个元素
    printf("%d %dn", *(arr+1), *(p+1)); // 指针算术都有效
    return 0;
}

上面代码中,arrp在算术运算时表现类似,但类型不同。

数组名作为指针使用的注意事项

1. 数组名不是可修改的左值

指针变量可以自增或重新赋值,但数组名是常量地址,不能做自增操作。

int arr[3] = {0};
int *p = arr;
p++; // 合法,p指向第二个元素
// arr++; // 编译错误,数组名不能作为左值自增

2. sizeof结果不同

对数组名用sizeof得到整个数组字节数,对指针用sizeof只得到指针本身大小。

表达式含义
sizeof(arr)数组总字节数,如5个int为20
sizeof(p)指针变量大小,通常4或8字节

3. 作为函数参数会退化

数组作为函数参数传递时,会退化为指针,丢失长度信息。

void foo(int a[]) {
    // 这里a实际是int*,sizeof(a)是指针大小
}

4. 取地址的区别

&arr得到的是指向整个数组的指针,类型和&arr[0]不同,但值一样。

int arr[5];
int (*pa)[5] = &arr; // 指向数组的指针
int *pi = &arr[0];   // 指向元素的指针

总结

数组名在表达式中通常当指针用,但它不是指针变量。写代码时要记住不能修改数组名、注意sizeof差异、函数传参会退化。搞清楚这些,就能安全地在指针和数组之间切换,减少Bug。

pointerarrayarray_name修改时间:2026-07-26 18:18:19

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。