- 数组名被视为指针,
cookies == &cookies[0]
- 整型数组作为形参(函数头和函数原型中的传入参数,其是按值传递的)的表达方法
int * 数组名, int 数组个数
或者
int 数组名[ ] , int 数组个数
其本质是将数组分成两个参数传入函数,其一是第一个元素的地址,及其类型,其二是数组的元素个数
(作为对比普通整型作为形参的表达为 int 参数名
)
- 数组与指针的转换恒等式
arr[i] = *(arr + i)
& arr[i] = arr +i
-
注意
int *arr
与int arr[]
并不总是一回事,只是在作为形参的声明中可以互换,不能在函数体中使用int arr[]
来声明指针 -
对指针声明的理解
int i =4;
int *a = &i;
先定义一个变量名为a,将i的地址赋值给a(此时a可以被称为半个指针了,他不完整,他不知道地址指向的数据类型,所以再声明一个数据类型就完整了),
*a 是a 地址中储存的变量, int *a 是说这个储存的变量是个整型,
- 对整型声明的理解
int i = 4;
先定义一个变量名叫做i,然后把4 这个值赋值给i, 然后告诉i 你是个整型。
- 指针与数组的关系:数组是指针加上数组长度
如果在主程序里打印数组名的长度,给出的是整个数组所有元素在一起的字节长度(即数组的长度),
如果是将数组首地址传入函数里,打印这个数组名(此时实质是个指针,其没有数组长度这个属性),给出的是这个地址的字节长度,不同长度字节系统给的值不同。