Tag: 数组

如何为函数内的数组分配内存

我正在尝试从用户那里收到一个号码。 并创建一个具有该数字的数组,但是在函数内部。 这是我的几次尝试,我遇到了运行时错误。 非常感谢帮助。 #include #include int* Init(int* p, int num); int main() { int *p; int num, i; puts(“Enter num of grades:”); scanf(“%d”, &num); Init(&p, num); //for (i = 0; i < num; i++) //{ // scanf("%d", &p[i]); //} free(p); } int* Init(int* p, int num) { int *pp; p = (int *)malloc(num*sizeof(int)); if […]

“Arrays = Pointers”*心灵狂热*。 许多年后:“实际上,他们没有”*心灵再次爆炸*

语境: 我在C中打开和关闭编程大约2年,然后发现a[i]只是*(a + i)语法糖,因此相当于* (i + a)和i[a] 。 我的现实被颠倒了,很多都是“AHA!” 在接下来的几天研究和阅读之后出现了启示时刻(“那就是为什么数组总是通过引用传递!”等)。 从那时起,我已经内化了指针/数组的等价并使它紧贴我的心脏,所以想象一下,当我偶然发现这个名为“arrays衰变”的东西时,这是多么的震撼。 这是典型的例子: 码: #include int Length(int*); int main () { int arr[100]; printf(“Length of array: %d\n”,(int)(sizeof(arr)/sizeof(arr[0]))); printf(“Length of array: %d\n”,Length(arr)); return 0; } int Length(int arr[]) { return sizeof(arr)/sizeof(arr[0]); } 结果: Length of array: 100 Length of array: 2 题: 事实certificate,C毕竟对数组有一些认识! 在声明数组的main中,程序能够正确地报告它的大小。 现在我想知道有多少数组语法只是指针操作的语法糖(以前我曾假设:所有这些)。 C实际上确实有数组,它们的局限性是什么? 这个例子表明只要你处于相同的function就可以获得它们的长度,你可以做些什么呢? […]

最常见的子序列:为什么这是错的?

int lcs(char * A, char * B) { int m = strlen(A); int n = strlen(B); int *X = malloc(m * sizeof(int)); int *Y = malloc(n * sizeof(int)); int i; int j; for (i = m; i >= 0; i–) { for (j = n; j >= 0; j–) { if (A[i] == ‘\0’ || […]

将数组作为参数传递给C语言

我(我想)我知道如果在堆栈的编译时声明它,你只能检索一个数组的大小(使用sizeof),例如 int my_array[] = {1,2,3}; sizeof(my_array) == 3; 一旦开始使用指针,就会丢失此长度信息。 例如,如果将指向int的指针作为函数参数传递以将int数组转换为函数,则不能再以这种方式使用sizeof() ,它将只返回用于存储指针的字节数。 显然,了解arrays的长度至关重要。 因此,在传递数组时,我应该使用以下哪个选项? 传递指针和附带的长度参数 int my_func(int *my_array, size_t len_my_array) 创建我自己的矢量结构 struct vector { int *my_array; size_t len; } int my_func(struct vector *my_vector) 使用别人的矢量实现。 (是否存在C的默认实现,因为有C ++?) 我错过了另一种方法吗? (我目前正在使用第一个选项,但它有点笨拙,我很想知道这是否被认为是糟糕的编程习惯)

PHP数组语法/运算符?

在PHP中编写关联数组的语法时,我们执行以下操作 $a = array(‘foo’ => ‘bar’); 我很好奇=>语法的关系,或者可能是运算符。 这是否与ZE中哈希表中使用的某种引用有关,或者与C使用的某种后续右移或引用有关? 我想我只是想知道这个语法的真正根本目的,它是如何与用于处理数组的ZE和/或php扩展相关,它如何与编译前C的书面函数相关,或者如果我只是不知道是什么我在说:)

将unsigned char数组的内容分成两半

我想知道是否有人可以帮助我我只学习c,我试图将unsigned char数组的内容分成两半,结果可以存储在两个unsigned int中, 例如,我在下面有一些代码将hex值添加到BYTE数组中,那么如何将val []的内容分成两个但保持相同的顺序 #include typedef unsigned char BYTE; int main() { // Sample purposes putting hex into val[8] int i,j; long long hex=0x78661EB54FE76763; BYTE val[8]; for(j=0,i=7; i>=0; i–,j++){ val[j]= (hex>>(i*8))&0xff; } // How to split the contents of val[8] which now holds the hex return 0; } 我试图将hex值拆分为78661EB5,4FE76763并将每个值存储在unsigned int中,该值存储在我的示例中的val [8]中

char *变量地址与char 变量地址

我将从以下两个声明和初始化中打印出地址和字符串: char * strPtr = (char *) “This is a string, made on the fly.”; char charArray [] = “Chars in a char array variable.”; 打印时,以下输出会出现变量charArray和strPtr的完全不同的地址。 问题是,“为什么?” 印刷: printf( “%10s%40s%20p\n”, “strPtr”, strPtr, &(*strPtr)); printf( “%10s%40s%20p\n”, “charArray”, charArray, charArray); 输出: strPtr This is a string, made on the fly. 0x400880 charArray Chars in a char array […]

如何在c中进行位设置/字节数组转换

给定一个数组, unsigned char q[32]=”1100111…” , 如何生成一个4字节的位集unsigned char p[4] ,这样,该位集的位等于数组内的值,例如,第一个字节p [0] =“q [ 0] … q [7]“; 第二个字节p [1] =“q [8] … q [15]”等。 以及如何在相反的情况下,即给定位集,生成数组? 我自己的第一部分试用了。 unsigned char p[4]={0}; for (int j=0; j<N; j++) { if (q[j] == '1') { p [j / 8] |= 1 << (7-(j % 8)); } } 以上是对的吗? 有条件要检查吗? 有没有更好的方法? 编辑 […]

C中的字符串指针数组

我知道C中的字符串基本上是一个字符数组。 我正在尝试一个指针数组,指针链接到字符串 我基本上想打印出来,而不依赖’\ n’来排序它 12345 abcde 67890 fghij 这是我的代码 – > char *array1 = “12345”; char *array2 = “abcde”; char *array3 = “67890”; char *array4 = “fghij”; char *array_2d[3]; array_2d[0] = &array1; array_2d[1] = &array2; array_2d[2] = &array3; array_2d[3] = &array4; int i,j; for(i = 0; i<3 ; i++ ) { for(j = 0; j<3 […]

如何使用fgetc()计算唯一的单词数,然后在C中打印计数

我已经问了一个与这个程序有关的问题,但现在经过大量的研究和头部停留后,我再次陷入困境。 我正在尝试编写一个程序,它将接受用户输入并存储它然后打印出所有唯一的单词和它们每次发生的次数 例如 Please enter something: Hello#@Hello# hs,,,he,,whywhyto[then the user hits enter] hello 2 hs 1 he 1 whywhyto 1 上面应该是输出,当然为什么为什么不是一个单词但在这种情况下无关紧要因为我假设任何字母的模式由不是字母的任何东西分隔(空格,0-9,#$ (@等)被认为是一个单词。我需要使用2D数组,因为我不能使用链表,也不能理解它们。 这就是我到目前为止所做的一切 #include #include int main() { char array[64]; int i=0, j, input; printf(“Please enter an input:”); input=fgetc(stdin); while(input != ‘\n’) { if(isalpha(input)) { array[i]=input; i++; } input=fgetc(stdin); } for(j=0;j<i;j++) { // printf("%c ",j,array[j]); […]