如何深入理解C语言中数组与指针的复杂关系?

2026-04-19 01:530阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3204个文字,预计阅读时间需要13分钟。

如何深入理解C语言中数组与指针的复杂关系?

1. 数组+数组大小(元素个数)一般在编译时决定,也有少数编译器可以运行时动态决定数组大小,如ICPC(Intel+C++编译器)。 1.1 数组名的意义+数组名的本质是一个文字常量,代表数。

1.数组

数组大小(元素个数)一般在编译时决定,也有少部分编译器可以运行时动态决定数组大小,比如icpc(Intel C++编译器)。

1.1数组名的意义

数组名的本质是一个文字常量,代表数组第一个元素的地址和数组的首地址。数组名本身不是一个变量,不可以寻址,且不允许为数组名赋值。假设定义数组:

int A[10];

那么再定义一个引用:

int* &r=A;

这是错误的写法,因为变量A是一个文字常量,不可寻址。如果要建立数组A的引用,应该这样定义:

int* const &r=A;

此时,现在数据区开辟一个无名临时变量,将数组A代表的地址常量拷贝到该变量中,再将常引用r与此变量进行绑定。此外,定义一个数组A,则A、&A[0]、A+0是等价的。

在sizeof()运算中,数组名代表的是全体数组元素,而不是某个单个元素。例如,定义int A[5],生成Win32的程序,sizeof(A)就等于5*sizeof(int)=5*4=20。示例程序如下。

阅读全文

本文共计3204个文字,预计阅读时间需要13分钟。

如何深入理解C语言中数组与指针的复杂关系?

1. 数组+数组大小(元素个数)一般在编译时决定,也有少数编译器可以运行时动态决定数组大小,如ICPC(Intel+C++编译器)。 1.1 数组名的意义+数组名的本质是一个文字常量,代表数。

1.数组

数组大小(元素个数)一般在编译时决定,也有少部分编译器可以运行时动态决定数组大小,比如icpc(Intel C++编译器)。

1.1数组名的意义

数组名的本质是一个文字常量,代表数组第一个元素的地址和数组的首地址。数组名本身不是一个变量,不可以寻址,且不允许为数组名赋值。假设定义数组:

int A[10];

那么再定义一个引用:

int* &r=A;

这是错误的写法,因为变量A是一个文字常量,不可寻址。如果要建立数组A的引用,应该这样定义:

int* const &r=A;

此时,现在数据区开辟一个无名临时变量,将数组A代表的地址常量拷贝到该变量中,再将常引用r与此变量进行绑定。此外,定义一个数组A,则A、&A[0]、A+0是等价的。

在sizeof()运算中,数组名代表的是全体数组元素,而不是某个单个元素。例如,定义int A[5],生成Win32的程序,sizeof(A)就等于5*sizeof(int)=5*4=20。示例程序如下。

阅读全文