我尝试以下代码指向2D阵列与不相容的行长度
char arr[5] = {'A', 'E', 'I', 'O', 'U'};
char (*p_arr)[1] = &arr;
printf("%c\n", p_arr[0][4]); //returns 'U'
为什么没有任何错误,因为
char (*p_arr)[1] = &arr;
似乎是从不兼容的类型的初始化(char (*)[5]
而不是要求char (*)[1]
)?此外,p_arr[0][4]
要求阵列的第5个元素应该只有1
元素。这不是错的吗?
你确定构建? 'p_arr'和'&arr'的类型是不同的,不应该允许初始化。 –
至于我认为你的问题是,C没有边界检查。 –
By _“C没有界限检查”_你的意思是说C编译器不在'char(* p_arr)[1] = &arr;'中使用'[1]'信息。如果是这样的话,C的静态内存分配是不是有问题? –