Tag: 指针

为什么在这里不会发生从非const到const的隐式转换?

可能重复: 为什么将(指向非const的指针)转换为(指向const的指针)是合法的 C中的双指针常量警告 我将gchar**传递给g_key_file_set_string_list ,它需要一个const gchar * const identifier [] /* this function is part of the GLib library */ void g_key_file_set_string_list(GKeyFile *key_file, const gchar *group_name, const gchar *key, const gchar * const list[], gsize length); const gchar **terms = malloc(sizeof(gchar*) * count); … … g_key_file_set_string_list(, , , terms, count); 和GCC 4.7.1的选项-std=c99 -pedantic给了我这个 警告:从不兼容的指针类型传递’g_key_file_set_string_list’的参数4 注意:预期’const […]

不允许在类型“const int ** const”和“int **”之间初始化,为什么?

使用V1.8 z / OS XL C编译器,使用INFO(ALL)警告升级,我在下面代码的第4行收到以下警告: WARNING CCN3196 Initialization between types “const int** const” and “int**” is not allowed. 1 int foo = 0; 2 int *ptr = &foo; 3 const int * const fixed_readonly_ptr = ptr; 4 const int ** const fixed_ptr_to_readonly_ptr = &ptr; 我无法理解为什么我会收到这个警告。 如果我可以为指向const int(第3行)的const指针分配一个int指针,那么为什么我不能将int指针的地址分配给指向const int的指针的const指针? 我错过了什么? 请注意,上面的代码是一个精简的示例,只是显示了我在少量代码中遇到的问题。 真正的上下文是我有一个const指针指向struct(struct s ** const),并将它作为参数传递给函数,该函数的参数被定义为指向const结构的const指针(const […]

当您取消引用后增量C时会发生什么

我收到了很多相互矛盾的答案。 但正如我一直理解的那样。 当我们在C中有一个指针并在后增量语句中使用它时,后增量将始终在代码行结算后发生。 int array[6] = {0,1,2,3,4,5}; int* p = array; printf(“%d”, *p++); // This will output 0 then increment pointer to 1 输出: 0 非常简单的东西。 现在,我正在接受人们告诉我的信息和我自己的经历中的一些不和谐。 // Same code as Before int array[0] = {0,1,2,3,4,5}; int* p = array; printf(“%d”, *(p++)); // Issue with this line 输出: 0 现在,当我运行代码的第二个版本时结果是它将输出0然后递增指针。 括号隐含的操作顺序似乎被违反了。 然而,这个网站上的其他一些答案告诉我,应该发生的正确的事情是增量应该在取消引用之前发生。 所以我想我的问题是:我的理解是否正确? post post […]

将数组称为指针

我似乎无法理解数组或2d数组上的不同声明之间的区别。 例如: void swap(char **a, char **b) { char *t = *a; *a = *b; *b = t; } int main(int argc, char **argv) { char a[] = “asher”; char b[] = “saban”; swap(&a,&b); } 这段代码没有编译,它输出: warning: passing argument 1 of ‘swap’ from incompatible pointer type test.c:10: note: expected ‘char **’ but argument is of […]

警告:赋值使用整数而不使用强制转换

我正在从指针执行转换然后它让我运行此警告(赋值使得指针来自整数而没有强制转换)。 这是代码: #include #include typedef int TipoChave; typedef struct TipoRegistro { TipoChave Chave; /*outros componentes*/ } TipoRegistro; typedef struct TipoPagina* TipoApontador; typedef struct TipoPagina { int registros; TipoRegistro *r; TipoApontador *p; } TipoPagina; TipoApontador NovaSubArvore(int ordem){ TipoApontador A; A=malloc(sizeof(TipoPagina)); int i; A->registros=0; A->r=malloc((2*ordem)*sizeof(TipoRegistro)); A->p=malloc((2*ordem+1)*sizeof(TipoPagina)); for (i=0;ip[i]=NULL; if(i!=2*ordem){ A->r[i].Chave=0; } } return (A); } 在主要我打电话: TipoApontador […]

使用指针时不兼容的类型

#include #include typedef struct contact { my_string name; my_string email; int age; } contact; typedef struct contact_array { int size; contact *data; } contact_array; void print_contact(contact *to_print) { printf(“%s (%s) age %i\n”, to_print->name.str, to_print->email.str, to_print->age); } int main() { int i; contact_array contacts = { 0, NULL }; for(i = 0; i < contacts.size; i++) […]

使迭代器成为指针会加速C循环吗?

我运行了以下内容: #include typedef unsigned short boolean; #define false 0 #define true (!false) int main() { int STATUS = 0; int i = 0; boolean ret = true; for(i = 0; i < 99999; i++) { ret = ret && printf("Hello, World."); } if(!ret) { STATUS = -1; } return STATUS; } 它在不到一秒钟内完成。 通常为0.9 – 0.92。 […]

Cfunction指针不幸事故

好的,所以我正在尝试学习函数指针。 我有一个像这样的基本函数指针设置。 打印出链表的function: void seq_print(Seq seq, void (* print_func)(void *)){ Node * p = seq->top; if(p == NULL){ printf(“%s %c”, “There is no data to print.”, ‘\n’); return; } while(p != NULL){ print_func(p->data); p = p->next; } } 测试function: seq_print(s, printFunc(1)); 我收到此错误: seq.h:113:32: error: expected declaration specifiers or ‘…’ before ‘(‘ token extern void seq_print(Seq […]

删除C中链表中的每个奇数位置节点

我试图在C中创建一个删除每个奇数定位节点的函数。 例如1,2,3,4变为2,4 。 这是我尝试过但它似乎没有起作用。 我在谈论deleteefunction。 我修改了它,但列表似乎没有改变。 #include #include typedef struct node { int val; struct node *next; } node; typedef struct ll { node *head; } ll; ll *newll() { ll *k = malloc(sizeof(ll)); k->head = NULL; return k; } void insert(ll *l, int vl) { node *tmp = malloc(sizeof(node)); tmp->next = NULL; tmp->val = […]

为什么我在C中的多维动态分配不起作用?

我一直试图弄清楚我在C中分配和使用多维动态分配数组的问题。我真的很感激任何帮助。 我尝试了两种方法。 首先: cdr = (double ***) malloc(NUM_REGIONS * sizeof(double **)); for(i=0; i<NUM_REGIONS; i++){ cdr[i] = (double **) malloc(numRatings * sizeof(double *)); for(j=0; j<numRatings; j++){ cdr[i][j] = (double *) malloc(remQuarters * sizeof(double)); } } 第二个: tempPtr1 = (double *) malloc(NUM_REGIONS * numRatings * remQuarters * sizeof(double) ); tempPtr2 = (double **) malloc (NUM_REGIONS * numRatings […]