在C:我写了一个函数,它检查arr2类型的子数组是否在数组中int"按原样"存在arr1,具有相同的类型.如果以完全相同的顺序arr2找到所有元素,则返回1 arr1,否则返回0.功能似乎工作正常,但我有两个问题:
Q1:如果我们想对两个数组中的混合类型的元素做同样的事情,特别是如果我们事先不知道将使用哪些类型的元素以及以什么顺序?我的意思是每个元素的类型和它们的外观顺序都必须由用户自行决定.我已经阅读了很多类似的问答,但我仍然不清楚这个解决方案.
Q2:考虑以下示例:
int arr1[] = {34, 231, "not the declared type..", "..recognized nevertheless", 3, 7};
int arr2[] = {231, "not the declared type..", "..recognized nevertheless"};
Run Code Online (Sandbox Code Playgroud)
为什么我的功能实际工作(例如在上述情况下返回1)?我认为它应该失败 - 因为使用的元素不是声明的类型(int) - 或者更糟糕的是我会得到编译器错误.相反,它似乎成功,因为它甚至可以恰当地识别和比较最后一个句号或大写字母.好吧,它确实失败了浮点数(我猜它会将它们转换为整数并只比较整数部分?)但为什么它在其他情况下没问题呢?它是否也会转换字符串,以及会发生什么样的转换?
我对C和论坛都很陌生,所以请原谅无知.
c中的数组是同质的,即所有元素都是相同的类型.您描述的示例:
int arr1[] = {34, 231, "not the declared type..", "..recognized nevertheless", 3, 7};
Run Code Online (Sandbox Code Playgroud)
是无效的代码.初始化器必须都是int,(或表达式可以隐式转换为int).
如果编译器没有为此代码生成诊断消息,则需要在编译器上调高警告级别.
某些编译器可能会将字符串转换为表示字符串第一个字符的内存地址的整数,作为非标准扩展.但C标准表示他们必须在这样做的同时输出诊断信息.