gpt4 book ai didi

c - 在C中: comparing arrays with both string and integer elements

转载 作者:行者123 更新时间:2023-11-30 19:57:55 25 4
gpt4 key购买 nike

在 C 中:我编写了一个函数,用于检查 int 类型的子数组 arr2 是否按原样存在于数组 中arr1,相同类型。如果在 arr1 中以完全相同的顺序找到 arr2 的所有元素,则返回 1,否则返回 0。该功能似乎工作正常,但我有两个问题:

问题1:如果我们想对两个数组中的混合类型元素执行相同的操作,特别是如果我们事先不知道将使用什么类型的元素以及按什么顺序使用,该怎么办?我的意思是每个元素的类型及其出现的顺序都必须由用户自行决定。我读过很多类似的问答,但我仍然不清楚解决方案。

第二季度:考虑以下示例:

int arr1[] = {34, 231, "not the declared type..", "..recognized nevertheless", 3, 7};

int arr2[] = {231, "not the declared type..", "..recognized nevertheless"};

为什么我的函数确实有效(例如在上述情况下返回 1)?我认为它应该失败 - 因为使用的元素不是声明的类型 (int) - 或者更糟糕的是我会收到编译器错误。相反,它似乎成功了,因为它甚至可以正确地识别和比较最后一个句号或大写字母。好吧,它确实会因 float 而失败(我猜它会将它们转换为整数并仅比较整数部分?)但为什么在其他情况下却可以呢?它也转换字符串吗?会发生什么样的转换?

我对 C 语言和论坛都很陌生,所以请原谅我的无知。

最佳答案

c 中的数组是同质的,即所有元素都是相同类型。您描述的示例:

int arr1[] = {34, 231, "not the declared type..", "..recognized nevertheless", 3, 7};

是无效代码。初始值设定项必须全部为 int(或可隐式转换为 int 的表达式)。

如果您的编译器没有为此代码生成诊断消息,那么您需要调高编译器的警告级别。

作为非标准扩展,某些编译器可能会将字符串转换为表示字符串第一个字符的内存地址的整数。但 C 标准规定,这样做时必须输出诊断消息。

关于c - 在C中: comparing arrays with both string and integer elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35443921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com