Tag: 数组

测量缓存延迟

所以我试图用C测量L1,L2,L3缓存的延迟。我知道它们的大小,我觉得我从概念上理解如何做到这一点,但我遇到了我的实现问题。 我想知道一些其他硬件错综复杂如预取是否会导致问题。 #include #include #include int main(){ srand(time(NULL)); // Seed ONCE const int L1_CACHE_SIZE = 32768/sizeof(int); const int L2_CACHE_SIZE = 262144/sizeof(int); const int L3_CACHE_SIZE = 6587392/sizeof(int); const int NUM_ACCESSES = 1000000; const int SECONDS_PER_NS = 1000000000; int arrayAccess[L1_CACHE_SIZE]; int arrayInvalidateL1[L1_CACHE_SIZE]; int arrayInvalidateL2[L2_CACHE_SIZE]; int arrayInvalidateL3[L3_CACHE_SIZE]; int count=0; int index=0; int i=0; struct timespec startAccess, endAccess; double […]

为什么不能使静态数组的大小变量?

可能重复: 我们可以给静态数组的大小一个变量 我在其中一个子文件中定义一个数组,如下所示。 static int arr[siz]; 这里siz是子文件可用的全局变量。 但是gcc编译器会产生以下错误: : : error : storage size of ‘arr’ isn’t constant 为什么我不能定义可变大小的static数组? 编辑:这似乎只是static int类型的问题。 如果我将arr的变量类型从static int更改为int ,则即使数组的大小仍依赖于变量siz ,错误也会消失。

如何在C中的函数中使用realloc

基于我在这里学到的东西: 通过C中的函数操作动态数组 。 void test(int data[]) { data[0] = 1; } int main(void) { int *data = malloc(4 * sizeof *data); test(data); return 0; } 这很好用。 但是,我也试图在函数中使用realloc 。 void increase(int data[]) { data = realloc(data, 5 * sizeof *data); } 这符合但运行时程序崩溃。 题 我应该如何在函数中使用realloc? 我知道我应该将realloc的结果分配给变量并检查它是否为NULL 。 这只是一个简化的例子。

迭代一个C数组

我有一个结构数组,我在程序中的某处创建。 后来,我想迭代一遍,但我没有数组的大小。 我如何迭代元素? 或者我需要在某处存储大小?

在C / C ++中,char * arrayName 是指向指针的指针还是指向指针的指针?

我理解多维数组作为指针的指针,但也许我错了? 例如,我虽然: char * var = char var[] char ** var = char* var[]或char var[][] char *** var = char var[][][]或char* var[][]或char** var[] 这不正确吗? 我很困惑,因为我在简单的教科书示例中看到了char * [] []演员作为char **。 我粘贴了下面的例子。 任何人都可以为我清除这个吗? 谢谢! /* A simple dictionary. */ #include #include #include /* list of words and meanings */ char *dic[][40] = { “atlas”, “A volume of […]

访问struct成员就好像它们是单个数组一样?

我有两个结构,其值应该计算一个沉重的平均值,就像这个简化版本: typedef struct { int v_move, v_read, v_suck, v_flush, v_nop, v_call; } values; typedef struct { int qtt_move, qtt_read, qtt_suck, qtd_flush, qtd_nop, qtt_call; } quantities; 然后我用它们来计算: average = v_move*qtt_move + v_read*qtt_read + v_suck*qtt_suck + v_flush*qtd_flush + v_nop*qtd_nop + v_call*qtt_call; 现在和他们一起我需要包含另一个变量。 现在,例如,我需要包含v_clean和qtt_clean 。 我无法将结构更改为数组: typedef struct { int v[6]; } values; typedef struct { int qtt[6]; […]

为什么248×248是我可以声明的最大二维数组大小?

我有一个程序问题,我想在C中声明一个256×256数组。不幸的是,我每次尝试声明一个大小的数组(整数)并运行我的程序时,它意外终止。 有什么建议? 我没有尝试过内存分配,因为我似乎无法理解它如何与多维数组一起工作(尽管我是C的新手,随时引导我完成它)。 另一个有趣的事情是我可以在C中声​​明一个248x248arrays没有任何问题,但没有更大的问题。 dims = 256; int majormatrix[dims][dims]; 编译: gcc -msse2 -O3 -march=pentium4 -malign-double -funroll-loops -pipe -fomit-frame-pointer -W -Wall -o “SkyFall.exe” “SkyFall.c” 我正在使用SciTE 323(不知道如何检查GCC版本)。

分配结构字段时,“错误:赋值给表达式,数组类型错误”(C)

我是初学C程序员,昨天我学习了C结构的使用以及这些结构可能应用于特定问题的解决方案。 然而,当我尝试使用我的C IDE(Codeblocks 16.01)来学习C编程的这个方面时,我遇到了一个奇怪的问题。 代码如下: #include #define N 30 typedef struct{ char name[N]; char surname[N]; int age; } data; int main() { data s1; s1.name=”Paolo”; s1.surname = “Rossi”; s1.age = 19; getchar(); return 0; } 在编译期间,编译器(Windows下的GCC 4.9.3-1)向我报告了一个错误 “错误:赋值给表达式,数组类型错误” 在指导上 s1.name=”Paolo” s1.surname=”Rossi” 如果我这样做的话 data s1 = {“Paolo”, “Rossi”, 19}; 有用。 我究竟做错了什么?

C中的指针与数组,非平凡差异

我以为我真的理解这一点,并重新阅读标准(ISO 9899:1990)只是证实了我明显错误的理解,所以现在我在这里问。 以下程序崩溃: #include #include typedef struct { int array[3]; } type1_t; typedef struct { int *ptr; } type2_t; type1_t my_test = { {1, 2, 3} }; int main(int argc, char *argv[]) { (void)argc; (void)argv; type1_t *type1_p = &my_test; type2_t *type2_p = (type2_t *) &my_test; printf(“offsetof(type1_t, array) = %lu\n”, offsetof(type1_t, array)); // 0 printf(“my_test.array[0] = […]

通过指针传递二维数组

如何将m矩阵传递给foo()? 如果我不被允许更改代码或foo()的原型? void foo(float **pm) { int i,j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) printf("%f\n", pm[i][j]); } int main () { float m[4][4]; int i,j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) m[i][j] = i+j; foo(???m???); […]