C语言的数组名是什么

简介: C语言的数组名是什么

数组名在一定的上下文表示整个数组或首元素地址(特殊指针)

数组名表示一块内存的首地址,这块内存的大小取决于元素类型及元素数量。

指针在一定的上下文中表示可以做左值的指针变量或做右值的指针值(一个地址值)。

指针变量也是一块内存的首地址,这块内存的大小是一个字长(word size),对于32位平台而言,就是32个位,4个字节。指针变量的值为目标对象的地址。

数组名在一定的上下文中表示整个数组,如与运算符“sizeof“及取址运算符"&"一起使用时:

int arr2[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int size = sizeof arr2 / sizeof arr2; // 3
int (
ap)[3][4] = &arr2;
数组名在其它上下文中表示数组首元素的地址,类型为元素类型:

int arr2[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int (arp)[4] = arr2;
当函数形参使用数组指针或指针变量指向数组时,运算符“[]”、“
”可以替换使用,但当使用extern声明外部变量时,则不可以替换使用:

include

extern int arr[]; // 与extern一起使用时,[]与不能相互替换
//int arr[5] = {1,3,5,7,9}; // 在另一cpp文件中,定义了全局数组arr
//extern int
arr; // error,当取arr的值时,其值
void foo(int arr,int size) // 用做函数形参时,[]与可以相互替换
{
for(int i=0;i<size;i++)
printf("%d ",arr[i]);
printf("\n");
}
void func(int arr[],int size)
{
for(int i=0;i<size;i++)
printf("%d ",arr[i]);
printf("\n");
}//代码效果参考:http://www.zidongmutanji.com/zsjx/221901.html

int main(void) {
const int size = 5;
foo(arr,size);
func(arr,size);
getchar();
return 0;
}
声明外部数组,需使用运算符“[]”,使用该声明时,取的是其地址值:

19: foo(arr,size); // extern int arr[];
0040116F push 5
00401171 push offset arr (00425a48)
00401176 call @ILT+10(foo) (0040100f)
声明外部数组,如果使用运算符“*”,使用该声明时,取的是其地址所在的值,也就是元素的值,当元素不是一个指针时,往往是一个非法地址值:

19: foo(arr,size); // extern int* arr;
0040116F push 5
00401171 mov eax,[arr (00425a48)]
00401176 push eax
00401177 call @ILT+10(foo) (0040100f)
-End-

相关文章
|
6月前
|
存储 程序员 C语言
C语言:数组名
C语言:数组名
|
1月前
|
存储 编译器 C语言
C语言:数组名作为类型、作为地址、对数组名取地址的区别
在C语言中,数组名可以作为类型、地址和取地址使用。数组名本身代表数组的首地址,作为地址时可以直接使用;作为类型时,用于声明指针或函数参数;取地址时,使用取地址符 (&),得到的是整个数组的地址,类型为指向该类型的指针。
|
1月前
|
编译器 C语言
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
|
C语言
C语言 --- 一维数组名的理解
C语言 --- 一维数组名的理解
106 0
|
C语言
【C语言】规范掌握C语言函数|数组名的妙用|指针快速入门|综合使用小案例
【C语言】规范掌握C语言函数|数组名的妙用|指针快速入门|综合使用小案例
65 0
|
算法 C语言
13【C语言 & 趣味算法】分糖果 问题。(数组名作为函数形参,亦即:形参数组名作 指针变量)
13【C语言 & 趣味算法】分糖果 问题。(数组名作为函数形参,亦即:形参数组名作 指针变量)
13【C语言 & 趣味算法】分糖果 问题。(数组名作为函数形参,亦即:形参数组名作 指针变量)
|
C语言
c语言 数组名和下标运算符
前面我们稍微提过数组的属性:数组名就是首元素的首地址,即 &a[0]==a; 则:int *p = &a[0] ; 也可写成 int *p = a ; 两者一摸一样,平时都是用第二种,因为写起来比较方便。
155 0
【C语言】数组名是什么
【C语言】数组名是什么
【C语言】数组名是什么
|
存储 C语言 人工智能