了解

  1. char *char **char *arr[]是指针类型。字节是8(64位操作系统)。(int *也一样)
    而数组 char arr[1][1]字节是1。
  2. 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);