Appearance
指针和数组
指针和数组变量是一样的
c
*(arr + i) <==> arr[i] <==> *(p+i) <==> p[i]但是:
c
ptr++; 可以指向下一个元素
arr++; 报错, 因为数组变量在常量池,
它是不可修改的(相当于 const, 不可以作为左值), 但 arr + n 的偏移是可以的另外 sizeof(arr) 能够打印数组的完整大小, 而如果通过函数参数传递的话, arr 会退化成一般指针.
指针数组的指针实际上是指向 arr[0] 的地址, 所以 sizeof(ptr) 等于 sizeof(arr[0]).
c
void func(int *arr)
{
sizeof(arr); // 8 Byte (64bit System)
}
int main(void)
{
int arr[4];
sizeof(arr); // 4*4 = 16 Byte
func(arr);
}所以, 在设计数组的函数的时候, 最好跟上一个参数传递数组的大小 :
c
void handle_arr(int *arr, int len);