Tag: 数组

指针数组与元素数组

今天早上我和同事就这个话题进行了讨论。 他说,将数组分配为指针数组总是更好,因为分别分配每个元素有更好的机会获得一个空闲的内存块。 有人这样想: // Consider n_elements as a dynamic value int n_elements = 10, i; int **ary = (int **) malloc(sizeof(int *) * n_elements); for(i = 0; i < n_elements; i++) { ary[i] = (int *) malloc(sizeof(int)); } 与他的方法相反,我认为分配元素数组更好,只是因为你会获得一个紧凑的内存块而不是遍布堆的一堆引用。 像这样的东西: int n_elements = 10; int *ary = (int *) malloc(sizeof(int) * n_elements); ary[0] = 100; […]

初始化指针指针数组

这个例子工作正常: static char *daytab[] = { “hello”, “world” }; 这不是: static char *daytab[] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; 我看到它的方式是第一个示例创建一个数组,该数组填充了指向两个字符串文字(它们本身就是数组)的指针。 第二个例子,IMO应该是相同的 – 创建一个数组并用指向两个char数组的指针填充它。 有人可以向我解释为什么第二个例子是错的吗? PS你可能会这样写(没有测试过): static char a[] = {0, 31, 28, […]

C:声明一个指向常量字符数组的常量指针

我试图理解数组声明,constness及其生成的变量类型。 允许以下内容(由我的编译器): char s01[] = “abc” ; // typeof(s01) = char* const char s02[] = “abc” ; // typeof(s02) = const char* (== char const*) char const s03[] = “abc” ; // typeof(s03) = char const* (== const char*) 或者,我们可以手动声明数组大小: char s04[4] = “abc” ; // typeof(s04) = char* const char s05[4] = “abc” ; […]

将char指针数组传递给C中的函数?

我有以下代码: int main(){ char **array; char a[5]; int n = 5; array = malloc(n *sizeof *array); /*Some code to assign array values*/ test(a, array); return 0; } int test(char s1, char **s2){ if(strcmp(s1, s2[0]) != 0) return 1; return 0; } 我正在尝试将char和char指针数组传递给函数,但上面的代码会导致以下错误和警告: temp.c:在函数’main’中: temp.c:6:5:警告:隐式声明函数’malloc'[-Wimplicit-function-declaration] temp.c:6:13:警告:内置函数’malloc’的不兼容隐式声明[默认启用] temp.c:10:5:警告:隐式声明函数’test'[-Wimplicit-function-declaration] temp.c:顶级: temp.c:15:5:错误:’test’的冲突类型 temp.c:15:1:注意:具有默认促销的参数类型不能与空参数名称列表声明匹配 temp.c:10:5:注意:先前的’test’隐式声明就在这里 temp.c:在函数’test’中: temp.c:16:5:警告:隐式声明函数’strcmp'[-Wimplicit-function-declaration] 我试图了解问题所在。

是UB访问一个二维数组行结束的元素吗?

以下程序的行为是否未定义? #include int main(void) { int arr[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; int *ptr1 = &arr[0][0]; // pointer to first elem of { 1, 2, 3 } int *ptr3 = ptr1 + 2; // pointer to last elem of { 1, 2, 3 } int *ptr3_plus_1 = […]

在数组中找到孤立的整数

如果可以的话,请参考这个 hackerrank挑战。 问题是在数组中找到孤立的整数,给定一个数组只包含一对,除了一个孤独的整数。 问题出在这个测试用例上 9 4 9 95 93 57 4 57 93 9 9是数组大小,下面是数组 查看// ——突出显示的代码部分 如果我将scanf(“%d”,&n)置于int arr [n]代码上方工作正常,但反过来会产生可怕的结果。 请帮帮我 #include int lonely_integer(int* a, int size); int main(){ //n is size of array, i is counter variable int n, i, result; // ——————— int arr[n]; scanf(“%d”, &n); // ——————— printf(“%d\n”, n); for(i = 0; […]

如何通过引用函数传递数组?

我有一个函数,它有一个数组指针传递它来修改数组中的东西: (void)arrayFunction 🙁 Byte [])targetarray {//做东西到targetarray} 它是Byte类型的数组,但我认为我没有把正确的东西放在圆括号中。 应该是什么而不是(Byte [])? 可能有几个不同大小的数组传递给此函数 提前致谢!

使用指针表示法在C中访问多维数组

设a是10个整数的一维数组,如下所示 int a[10]; 并为上面声明的数组表达式 a[i] 被评估为*(a + i)并给出存储在第i个索引处的值,例如 int a[5]={1,2,3,4,5}; 这里a [3]被评估为*(a + 3) ,它等于4 ,即存储在数组a的 第3个索引处的元素的值。 但是像这样的2Darrays的情况 int b[2][3]={ {1,2,3},{4,5,6} }; (这里我认为2D数组b是1D数组的数组,即b是具有2个元素的1D数组,每个元素本身是3个int的1D数组)如果我们使用带有数组名称的单个下标运算符 b[i] i = 1的上述表达式给出了存储元素4的地址,所以 在b是2D数组的情况下,如何计算表达式b [i] ? 在b是2D数组的情况下,如何计算表达式b [i] [j] ? 如何使用指针访问C中的多维数组元素。 在这里,我想了解编译器如何在内部处理多维数组? 如果b是2D数组, b会评估什么?

在C中连接字符串的安全方法是什么?

我需要从两个字符串构造一个文件的路径。 我可以使用它(虽然没有经过测试): /* DON’T USE THIS CODE! */ /* cmp means component */ char *path_cmp1 = “/Users/john/”; char *path_cmp2 = “foo/bar.txt”; unsigned len = strlen(path_cmp1); char *path = path_cmp1; for (int i = 0; i < strlen(path_cmp2); i++) { path[len + i] = path_cmp2[i]; } 但这可能会导致内存损坏。 有没有更好的方法来做到这一点,或者标准库中是否有这样的function?

C中结构中的多个灵活数组?

我在c结构中有多个灵活的数组: typedef struct { int a; float b; } Name; typedef struct { int c; int d; int e; } NIM; typedef struct { int age; int time; Name name[1]; NIM nim[1]; } EthgenSig; 如果我们需要像这样分配内存: malloc(sizeof(EthgenSig) + sizeof(Name) * 10); 如何分配内存,如果我们首先运算符name数组然后我们稍后运行nim数组,那么nim[1]将覆盖name数组,那么如何解决呢?