本文共 1917 字,大约阅读时间需要 6 分钟。
数组变量名实际上是一个指针,这个指针指向数组中第一个元素a[0]的地址。在C语言中,数组变量本身就是一个指针,无需使用 "&" 取地址符。例如:
int a[5] = {1,2,3,4,5};
这里的a就是a[0]的指针地址。在验证代码时,可以看到输出结果应为相同的地址:
printf("%p\n", a); printf("%p\n", &a[0]);
输出结果为:000000000062FE00000000000062FE00
需要注意的是,数组不能通过赋值符号直接接收另一个数组的所有值。尝试直接赋值另一个数组给本数组是错误的:
int a[] = {1,2,3}; int b[] = a;
将数组作为函数参数传递时,函数接收的是原数组中a[0]的地址指针,而不是数组本身。因此在函数内部,可以使用 sizeof 来获取数组的大小,但需要通过 len 参数来传递大小。例如:
void see(int a[], int len){
函数参数a是一个指针,使用 sizeof(a) 来获取单个元素的大小,len则通过外部传递数组大小。可以通过 sizeof(int*) 确认数组大小是否正确:
printf("%d\n", sizeof(int*));
输出结果为:88
需要注意的是,数组参数可以通过数组运算符进行操作,但不直接对原数组进行操作。
(1)数组变量本身是一个指针,可以直接操作。例如:
int a[10]; int *p = a;
(2)数组运算符可以对指针进行操作。例如,p[0] 等于 a[0]。
(3)*运算符可以对指针进行操作,例如 *a 等于 a[0]。需要注意的是,数组变量是 const 类型,无法赋值为其他数组。例如:
int a[] = {1,2,3}; int b[] = a;
(4)操作符 [*] 可以同时对数组和指针进行操作。例如,*a 等于 a[0],a* 指针到数组的起始位置。需要注意的是,数组变量本身表示的地址,不能用赋值符号直接赋值。例如:
int a[5] = {1,2,3,4,5}; *a = 10;
操作后,a[0] 被修改为10。通过比较 *a 和 a[0],可以验证两者的值是否相等。例如:
if(*a == a[0]) {
当数组作为函数参数传递时,函数接收的是原数组中a[0]的地址指针,而数组大小需要通过外部的 len 参数传递。例如:
void see(int a[], int len){
在函数内部,可以使用 len 来处理数组大小。需要注意的是,原数组不能在函数中被修改。例如,传递数组大小可以通过 sizeof(a) / sizeof(a[0]) 来计算。例如:
int len = sizeof(a) / sizeof(a[0]);
数组变量是一个特殊的指针,不能像普通指针那样直接赋值。数组变量本身就是指向数组起始元素的指针。在操作数组变量时,需要注意以下几点:
1. 数组变量表示的是数组起始元素的地址,不能直接用赋值符号(&)操作。
2. 可以通过数组运算符 [ ] 对指针进行索引操作。例如,p[2] 等于数组中第三个元素(p + 2 这个地址的内容)。
3. 可以通过 * 运算符获取数组中的元素值,例如 *p 对应 a[0] 的值。需要注意的是,* 运算符会自动取指针指向内存单元的值。
4. 数组变量是 const 类型,不能修改其本身。例如,尝试重新赋值给数组变量是错误的。例如,int a[] = {1,2,3}; int b[] = a; 不能这样直接赋值。
函数参数中的数组实际上是一个指针,指向原数组中a[0]的地址。在函数中,数组大小需要通过外部参数传递。例如,可以使用 sizeof(a) / sizeof(a[0]) 来计算数组大小。需要注意的是,原数组的元素不能在函数中被修改。在函数声明时,以下四种函数原型是等价的:
int sum(int a[], int n); int sum(int*, int); int sum(int a[], int n); int sum(int[] , int);
需要注意的是,数组参数是一个指针,外部需要确保数组的元素可以被正确访问。例如,可以通过数组运算符直接操作指针。例如,p[5] 对应数组中第6个元素。通过 * 运算符可以获取单个元素的值。需要注意的是,数组参数是一个 const 类型,无法在函数内部修改数组的大小或指针地址。函数内部只能使用传入的数组大小来处理数组元素。
转载地址:http://okakk.baihongyu.com/