下面我会详细讲解“C语言数组与地址、数组名到底是什么”的完整攻略。
什么是数组
在 C 语言中,数组是同一类型数据元素的集合,这些元素在内存中是连续排列的。数组有一个固定大小,一旦被创建,就不能再改变它的大小。数组中的元素可以通过下标访问,下标可以为整数或表达式。
数组与地址
在 C 语言中,数组名代表数组第一个元素的地址。例如,对于下面的数组:
int a[] = {1, 2, 3, 4, 5};
它的首地址就是 a
,也可以写成 &a[0]
。
为了访问数组中的元素,我们可以通过指针将地址赋值给一个指针变量。例如:
int *p;
p = a;
这里定义了一个指向整型变量的指针 p
,并将它赋值为数组的首地址。这样,我们就可以通过指针 p
访问数组中的元素。例如,访问数组的第一个元素可以写成 *p
,访问第二个元素可以写成 *(p+1)
,访问第三个元素可以写成 *(p+2)
,等等。
在 C 语言中,数组名也可以看作是一个常量指针,因此不能对数组名进行赋值。例如,下面的代码是错误的:
int a[] = {1, 2, 3, 4, 5};
int *p;
p = a; // 正确
a = p; // 错误
示例说明
下面我们通过示例来说明数组与地址、数组名的用法。
示例一
#include <stdio.h>
int main() {
int i, a[5] = {1, 2, 3, 4, 5};
int *p = a;
for (i = 0; i < 5; i++) {
printf("%d ", *(p + i));
}
printf("\n");
return 0;
}
上面的代码定义了一个长度为 5 的整型数组 a
,并将数组的首地址赋给了指针变量 p
。然后通过指针 p
访问数组中的元素,输出结果为:
1 2 3 4 5
示例二
#include <stdio.h>
int main() {
int a[] = {1, 2, 3, 4, 5};
int *p1 = a;
int *p2 = &a[2];
printf("a = %p\n", a);
printf("&a = %p\n", &a);
printf("p1 = %p\n", p1);
printf("&p1 = %p\n", &p1);
printf("p2 = %p\n", p2);
printf("&p2 = %p\n", &p2);
return 0;
}
上面的代码定义了一个长度为 5 的整型数组 a
,并定义了两个指向数组的指针 p1
和 p2
。然后输出数组和指针的地址,输出结果为:
a = 0x7ffee34d7a60
&a = 0x7ffee34d7a60
p1 = 0x7ffee34d7a60
&p1 = 0x7ffee34d7a58
p2 = 0x7ffee34d7a68
&p2 = 0x7ffee34d7a70
可以看到,数组、数组名和指针的地址是一样的,它们都指向数组的首地址。但是,数组名和指针的地址不同,数组名代表的是指针常量,而指针是变量,它们的地址不同。
这就是关于“C语言数组与地址、数组名到底是什么”的完整攻略了。希望我的讲解对您有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言数组与地址、数组名到底是什么详解 - Python技术站