char的指针
char* a = "hello";
char* b = "hello";
char a2[] = "hello";
char b2[] = "hello";
a = b,a2!=b2,a!=a2,b!=b2;
如果使用指针的方式指向一串字符串,那么这串字符串在常量区,a只是指向那段空间;
使用数组的方式,将会开辟新的空间存储这串字符串。
数组指针
int arr[10] = {0};
arr = &arr, 但是arr和&arr的含义不一样,arr代表数组首元素地址,&arr代表数组的地址。
&arr相当于这里的parr指针,是一个数组指针:
int (*parr)[10] = &arr;
如果对指针进行+1操作,arr+1跳过一个int数据,&arr+1跳过一整个数组对象。
数组传参
一维数组
传值传参:void func(int arr[10])
传指针传参:void func(int* arr)
看这里,传递过来的arr是什么?是第一个元素的首地址!
如果传的是数组指针将是什么情况?
如果在这个函数中使用[]访问了数组中的成员,将是什么结果?
#include <stdio.h>
void func(int(*p)[10])
{
printf("%d", p[8]);
}
int main()
{
int arr[10] = {0,1,2,3,4,5,6,7,8,9};
func(&arr);
return 0;
}
二维数组
传值传参:void func(int arr[][5])
这里可以省略行数,但不能省略列数!
为什么?
传指针传参:void func(int (*pa)[5])
这里是二维数组的模型,对于二维数组来言,它的第一个首元素是一个一维数组,所以这里传递的pa是一个数组指针。