Tag: 数组

C:确保从数组返回的元素是正确的

假设我们有这段C代码: int x[] = {1, 2, 3, 4, 5}; printf(“%d”, *(x + 1)); //prints 2 printf(“%d”, *(x + 500)); //prints 7209065 (…?) 正如你从第二次调用中看到的那样,它仍然会返回一些东西……但它是垃圾。 所以我问,你如何处理C中的这种情况? 也就是说,你怎么知道返回的元素是否真的是数组中存在的元素还是只是垃圾?

通过任意大小的2维数组

嗨,我正在研究排序算法,因为我想制作一个简单的程序,从文本文件中获取整数数组。 在这样做的时候,我遇到了一些麻烦和关于数组和函数的问题,并将它们作为参数。 这是我做的: #include #include #define MAX_SIZE 64 #define MAX_INT_SIZE 10000 void itobuff(const char* istring,const int** sint); int getistring(FILE* file,char strbuffer[][MAX_SIZE],int max_int,int max); int main(int argc,char*argv[]){ char buffer[MAX_INT_SIZE][MAX_SIZE]; int int_counter=0; int int_buffer[MAX_INT_SIZE]; FILE *file = fopen(“MYFILE.txt”,”r”); getistring(file,buffer,MAX_INT_SIZE,MAX_SIZE); return 0; } 我的疑问是关于function的定义 int getistring(FILE* file,char strbuffer[][MAX_SIZE],int max_int,int max); 我想写一个允许使用任何大小数组的函数。 我知道这是错的,但从逻辑上讲,这是我想要实现的,但无法弄清楚如何。 int getistring(FILE* file,char strbuffer[][],int max_int,int max); […]

在C语言中将字符附加到字符数组中

我想将一个字符附加到表示String的字符数组中。 我使用Struct来表示String。 struct String { char *c; int length; int maxLength; }String; realloc搞砸了我的阵容; 当我打印我的字符串时,它会从内存中打印随机内容。 我觉得我通过realloc失去了对我的字符串的引用。 void appendChar(String *target, char c) { printf(“\String: %s\n”, target->c); // Prints the String correctly. int newSize = target->length + 1; target->length = newSize; if(newSize > target->maxLength) { // Destroys my String. target->c= (char*) realloc (target, newSize * sizeof(char)); target->maxLength = […]

sizeof(array)/ sizeof(int)

在函数中我声明了一个数组: int char_count_array[118] = {0}; 稍后,我将此数组传递给函数并计算以下内容: int xx = sizeof(char_count_array); int xy = sizeof(char_count_array)/sizeof(int); 但是,我得到的结果是: xx = 4 xy = 1 我以为我会得到: xx = 472(118 * 4)xy = 118(472/4) 。 谁会知道我在这里做错了什么?

如何实现n元素的搜索和插入操作的动态二进制搜索

根据n的二进制表示,我们的想法是使用多个长度为2 ^ k的数组来存储n个元素。每个数组都被排序,不同的数组不以任何方式排序。 在上述数据结构中,SEARCH通过每个arrays上的二进制搜索序列来执行。 INSERT由相同长度的数组的合并序列执行,直到到达空数组。 更多细节:假设我们有一个长度为2 ^ k的垂直数组,并且该数组的每个节点都附加了长度为2 ^ k的水平数组。 也就是说,对于垂直arrays的第一节点,连接长度为2 ^ 0 = 1的水平arrays,对于垂直arrays的第二节点,连接长度为2 ^ 1 = 2的水平arrays,依此类推。 因此,首先在第一水平arrays中执行插入,对于第二插入,第一arrays变为空并且第二水平arrays充满2个元素,对于第三插入第一和第二arrays水平。 数组被填充等等。 我实现了搜索的常规二进制搜索并插入如下: int main() { int a[20]= {0}; int n, i, j, temp; int *beg, *end, *mid, target; printf(” enter the total integers you want to enter (make it less then 20):\n”); scanf(“%d”, &n); if […]

嵌入式系统C中最快的arrays查找算法?

假设我有一个定义大小为22的常量浮点数,如下所示: array[0]= 0; array[1]= 0.5; array[2]= 0.7; array[3]= 1.8; … … array[21]= 4.2; 这个数组的值是单调的,也就是说,它们总是随索引而增加(array [0] <= array [1] <= array [2] <= …. <= array [21])。 我想要一个给定一个浮点数的函数,它找到数组的索引,其值正好在输入浮点数之下(因此,下一个索引的值紧接在上面) 例如,在前一种情况下,如果函数的输入值为0.68,则函数的输出应为1,因为数组[1] <= 0.68 现在,这很容易实现,但我正在处理嵌入式系统中代码的一个非常时间关键的部分,我真的需要一个非常优化的算法,它避免了循环(以避免开销)。 我现在使用的最简单的方法就是用if-elses展开循环,就是这样。 例: if(input >= array[size-1]) return size-1; else if(input>= array[size-2]) return size-2; else if(input >= array[size-3]) return size-3; … … 但这里的问题是我有抖动,因为不同输入的路径需要明显不同的时间。 所以我的问题是:是否有最快,更确定(更少抖动)的方式来实现它? 谢谢。 乔治。

如何存储多达1,000,000,000个元素

#include #include #include int max_b(int,int); int max(int[],int); int main(){ int num_tests; scanf(“%d”,&num_tests); int array_n[num_tests]; int array_b[num_tests]; int i,j; for (i=0;i<num_tests;i++){ scanf("%d %d",&array_n[i],&array_b[i]); } for (j=0;j<num_tests;j++){ int A = 1; int N = array_n[j]; int B = array_b[j]; int max_num_b; max_num_b = max_b(N,B); int array2[max_num_b]; int k; for (k=0;k<max_num_b;k++){ int num_a,num_b; num_a = N-(k+1)*B; num_b = […]

初始化struct数组时出错(不兼容的类型)

我已经读过一些类似的问题,但我仍然看不出我出错的地方。 我malloc指针,似乎工作正常,但我在这一行得到一个错误(不兼容的类型): canArray [i] = (TinCan *) malloc(sizeof(TinCan)) 这是完整的代码: typedef struct TinCan { int date; int time; } TinCan; int main () { int i; TinCan *canArray = malloc(10 * sizeof(TinCan)); for (i =0; i < 9; i++ ) { canArray [i] = (TinCan *) malloc(sizeof(TinCan)); } }

C将存档的行转换为数组

我有一个存档,我想把每一行变成一个数组:v [i] .data。 但是,当我运行代码时,它会为数组显示零。 有什么我应该改变的吗? 输入 1760 2月20日/ 18,11403.7 2月19日/ 18,11225.3 2月18日/ 18,10551.8 2月17日/ 18,11112.7 2月16日/ 18,10233.9 实际产出 1761 0 预期产出 1761 2月20日/ 18,11403.7 #include #include #include #include typedef struct{ char data[20]; }vetor; int main(int argc,char *argv[]){ FILE *csv; if((csv=fopen(argv[1], “r”)) == NULL ) { printf(“not found csv\n”); exit(1); } long int a=0; char linha[256]; […]

C函数返回数组

我相对知道C,我习惯用Java编程,所以我发现C在数组方面有点困难。 在这种情况下,我仍然赞同自己: int a []; int* a; int *a; 在java中,我会做这样的事情来返回一个函数中的数组: int [] returnArr(int [] a){ … modify a … return a; } int [] a = {…}; int [] b = returnArr(a); ## 我怎么能在C中做同样的事情,特别是##的部分。 编辑:我有这个function: float *normalizeValues(float *v, float maxY){ int size = sizeof(v) / sizeof(float); float max = findMax(v); float ratio = maxY / […]