了解
char *和char **和char *arr[]是指针类型。字节是8(64位操作系统)。(int *也一样)
而数组 char arr[1][1]字节是1。
char *arr[]是定义了多个指针。
把数组写成指针时按顺序替换。
说明
char* arr 和 char arr[x]的区别。
为什么要给数组赋值,因为要给它开内存,等同于意义char arr[] = "string"
而
char* arr是定义指针变量。没赋地址的时候是乱指的,野指针。
所以,
char* arr[]是定义了多个地址变量。
char arr[x][y]是需要开辟应有的内存的。
这就是scanf能直接读入char arr[x][y]
而
不能读入char* arr[]的原因。
示例
1 2 3 4 5 6 7
| char* arr[3]; //因为 char* x; x的地址为&x //so printf("%p %p %p\n", &arr[0], &arr[1], &arr[2]);//指针的地址 //自然而然 printf("%p %p %p\n", arr, arr + 1, arr + 2); //指针的地址
printf("%p %p %p\n", arr[0], arr[1], arr[2]); //这些才是定义的地址变量(指针变量)还没赋地址
|
1 2 3
| char* arr; //字符串 arr = "ferry"; //试过scanf不行,因为还没开辟内存 printf("%s", arr);
|
1 2 3
| char arr[10]; scanf("%s", arr); printf("%s", arr);
|