我想创建一个存储排列序列的动态数组,这样 order[0][]={1,2,3} order[1][]={2,1,3} order[2][]={2,3,1} 假设顺序[m] [n],m =排列数,n =项数,m和n是实时识别的。 我做了以下,发现指针地址重叠,导致值存储不正确。 如何通过双指针正确使用动态数组呢? void permute(int num_permute, int num_term, int** order) { int x, y; int term[5]; /* debug only */ for(y=num_term, x=0; y>0; y–, x++){ term[x] = y; } fprintf(stderr, “\n”); printf(“order%12c”, ‘ ‘); for (x=0; x<num_permute; ++x) { printf(" %-11d", x); } printf("\n"); for(y=0; y<num_permute; y++){ printf("%-5d%12p", […]
main.c:78:25: erreur: assignment from incompatible pointer type [-Werror] main.c:81:9: erreur: passing argument 2 of ‘matrix_multiply’ from incompatible pointer type [-Werror] main.c:6:11: note: expected ‘struct matrix_t *’ but argument is of type ‘struct matrix_t *’ 第6行是matrix_multiply函数 这是我的代码,从第74行开始 matrix_t *m; matrix_t *first = matrix_reader_next(reader); matrix_t *previous = first; while ( (m = matrix_reader_next(reader))) { previous->next = m; […]
我注意到在C中接受一个非malloc ed指针作为第二个参数而不是返回指针是一个常见的习惯用法。 例: /*function prototype*/ void create_node(node_t* new_node, void* _val, int _type); /* implementation */ node_t* n; create_node(n, &someint, INT) 代替 /* function prototype */ node_t* create_node(void* _val, int _type) /* implementation */ node_t* n = create_node(&someint, INT) 两种方法的优点和/或缺点是什么? 谢谢! 编辑谢谢大家的回答。 选择1的动机现在对我来说非常清楚(我应该指出,选择1的指针参数应该与我原先的想法相反)。
main() { char a[] = “Visual C++”; char *b = “Visual C++”; printf(“\n %d %d”,sizeof(a),sizeof(b)); printf(“\n %d %d”,sizeof(*a),sizeof(*b)); } sizeof(a)给出输出: 11 (即字符串的长度) 为什么会这样? 为什么输出sizeof(a) = 4因为当我尝试打印它时,它给我一个地址值,因此是一个整数?
尝试下面的代码来检查当我们将整数指针转换为整数时会发生什么。 #include #include int main() { int *p; int a; p = (int *)malloc(sizeof(int)); *p = 10; a = (int)p; printf(“%d\n”,*p); printf(“%d \n”,a); return 0; } The output is : 10 135680008 任何人都可以解释一下这个转换的概念吗? 提供与此主题相关的任何链接也会有所帮助。
我有两种类型。 一个类型A和一个类型B.问题类型A包含类型B,类型B包含类型A.这样的事情将不起作用: type typeA = record test1 : typeB; end; type typeB = record test2 : typeA; end; 编辑:那不是我的设计。 我将包含此类构造的C头文件(访问DLL)转换为delphi。 编辑2: “C ++结构是类AFAIR的另一个名称。并且必须有指针,而不是值本身。 – Arioch’1分钟之前”是的你是对的,它是一个类型的指针: 我在那里定义: test1 : ^typeB; 这会改变吗? test1 : Pointer; Edit3: C结构: /* DLPDFPAGE */ typedef struct dlpdfpage { CosObj Page; CosObj PrintSelect; ASFixedRect PageBBox; ASFixedRect ContentBBox; struct dlpdfpage *Next; PDRotate Angle; […]
我正在使用指针并想出了一个问题。 到目前为止,我知道当我们创建任何数据类型的数组时,数组的名称实际上是指向数组的第一个索引的指针(可能是静态指针)。 正确? 所以我想要实现的是创建另一个指针,该指针可以保存数组名称的地址(即指向另一个指针的指针,在我的例子中是数组名称) 例如: char name[] = “ABCD”; // name holding the address of name[0] char *ptr1 = name; // When this is possible char **ptr2 = &name; // Why not this. It give me error that cannot convert char(*)[5] to char** 我正在使用代码块作为IDE。
我有以下function签名 int foo(void **) 并试图给它一个指向char指针的指针,即char ** 。 我的编译器抱怨以下警告 argument of type “char **” is incompatible with parameter of type “void **” 这是预期的吗? 我知道将一个char *传递给一个期望void *的函数void *不需要显式转换,但这对指针指针是否正确? 注意:这显然是一个C问题。 如果不同的C版本对此有不同的看法,我会感兴趣。
标题可能令人困惑。 假设str是malloc分配的指针。 类型为int* ptr被赋值给它并被释放,如下面的代码片段所示: char* str = malloc(64); int* ptr = str; free(ptr); 我试图编译上面的代码。 它只是发出警告: source_file.c: In function ‘main’: source_file.c:10:16: warning: initialization from incompatible pointer type int* ptr = str; ^ 上面的代码是否调用未定义的行为? 上面的代码片段是否释放了malloc为str分配的malloc ?
我之前读过一个因为与此完全重复而被关闭的问题 当函数具有特定大小的数组参数时,为什么它被指针替换? 和 如何找到’sizeof’(指向数组的指针)? 但在阅读本文后,我仍然对sizeof()的工作方式感到困惑。 我理解将数组作为参数传递给函数,如 void foo(int a[5]) 将导致数组参数衰减为指针。 我在上面的2个问题链接中没有找到的是一个明确的答案,为什么sizeof()函数本身免于(或至少看似豁免)这个指针衰减行为。 如果sizeof()表现得像任何其他函数那么 int a[5] = {1,2,3,4,5}; cout << sizeof(a) << endl; 那么上面应该输出4而不是20 。 我是否错过了一些明显的东西,因为这似乎与指针行为的衰退相矛盾? 很抱歉再次提起这个问题,但我真的很难理解为什么会发生这种情况,尽管多年来一直很愉快地使用这个function而没有真正考虑它。