#include <stdio.h>
#define SIZE 5
int main(void) {
char *strings[SIZE];
char (*str)[SIZE];
printf("size of str = %zd, size of strings = %zd\n",
sizeof(str), sizeof(strings));
int (*arr)[SIZE];
int *ptr[SIZE];
printf("size of arr = %zd, size of ptr = %zd\n",
sizeof(arr), sizeof(ptr));
// 注意二者的区别:arr 是一个指针类型,指向的数据类型是 int name[5](int 类型的数组);
// 注意二者的区别:ptr 是一个数组类型,其中的元素类型是 int * name(int 类型的指针);
// 同理
// strings 是一个数组,里面的元素类型是 char *;
// str 是一个指针,指向的数据类型是 char name[5];
// 延伸
// 为什么 定义二维数组(int类型的) 的定义方式是 int (*arr)[size] 而不是 int *arr[size] 呢
// 从上面的分析可知 int (*arr)[size] 表示的是一个指针,指向的数据类型是 int name[5]
// 而 数组表示应该是这种: int arr[3][5] . 那么 arr[0], arr[1]... 都代表了一个 int name[5],
// 如果是 int * arr[size] ,则表示arr一个数组,里面的元素是 int *;
return 0;
}
输出如下:
size of str = 8, size of strings = 40
size of arr = 8, size of ptr = 40
说明当前系统将一个指针的长度定为8个字节。