我听说有传言说,在C中,包含在结构中的数组可能在数组的元素之间添加了填充.显然,填充量不能在任何元素对之间变化,或者使用简单的指针算法计算数组中的下一个元素是不可能的.
这个谣言还指出,结构中没有包含的阵列保证不包含填充物.我知道至少那部分是真的.
因此,在代码中,谣言是:
{
// Given this:
struct { int values[20]; } foo;
int values[20];
// This may be true:
sizeof(values) != sizeof(foo.values);
}
Run Code Online (Sandbox Code Playgroud)
我非常肯定sizeof(values)会永远相等sizeof(foo.values).但是,我无法在C标准(特别是C99)中找到明确证实或否认这一点的任何内容.
有谁知道这个谣言是否在任何C标准中得到解决?
编辑:我知道在数组foo.values的结尾和结构的结尾之间可能存在填充foo,并且标准声明在开始foo和开始之间不存在填充foo.values.但是,是否有人引用或引用标准,其中表示元素之间没有填充foo.values?
为了使我的计算物理项目中的一个程序(不是由我编写)更加动态,我一直在努力实现C中非常简单的事情:在if条件下逐个元素地比较两个不同的数组.
#include <math.h>
#include <stdio.h>
#include "header.h"
const int nParam = 10;
double a[nParam], a_tmp[nParam];
double values[10000];
double FitParam(double x){
int xindex;
double value;
xindex=(int) x;
if (a_tmp[1]==a[1] && a_tmp[2]==a[2] && a_tmp[3]==a[3] && a_tmp[4]==a[4]){
value=values[xindex];
return(value);
}
// code continues... (very long subroutine and there is recursion for
// the subroutine so this if statement above is very important).
Run Code Online (Sandbox Code Playgroud)
每次运行程序时,数组a []都有不同数量的重要元素; 例如,现在,我们仅将这个子程序用于元素[1]到[4].但是,在其他情况下,我们希望分别拥有更少或更多的元素,例如最多3个元素或最多5个元素.
基本上,我希望能够重写上面的if语句,使其成为动态...换句话说,如果考虑了N个元素,那么它将会:
if (a_tmp[1]==a[1] && ... && a_tmp[N]==a[N]){}
因此,每当我们感兴趣的元素的数量N改变时,条件应该变化(N被定义为该文件的头部中的#define,我将其命名为header.h).
非常感谢您对此任务的支持.谢谢.
我想比较两个不同的数组,它们都是int. 第一个数组是静态的,包含 1 到 10 的数字,第二个数组要求用户输入十个不同的数字,程序会检查两个数组中的哪些元素相等。
#include <stdio.h>
int main(void) {
int array1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int array2[10];
int i;
for (i = 0; i < 11; i++) {
printf("Enter numbers: ");
scanf("%d", &array2);
}
for (i = 0; i < 11; i++) {
if (array1[i] != array2[i]) {
printf("Not equal \n");
} else {
printf("They are equal. \n");
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使我输入的数字等于存储在第一个数组中的数字,程序也总是说不相等。
我必须检查两个数组(1-D)与整数元素的相等性.
我明白没有直接的比较方式.所以我正在进行基本的迭代并检查每个元素的相等性.
for ( int i = 0 ; i < len ; i++) {
// Equality check
Run Code Online (Sandbox Code Playgroud)
在C中测试数组相等性的最有效方法是什么?我可以以某种方式逃脱循环(为......)吗?