我有一些代码在GCC 4.8.4下编译得很好。 我最近升级了我的系统,现在有GCC 5.2.1,我收到有关不兼容指针类型的警告。 我已经将问题提取到一个重现错误的小例子: typedef const double ConstSpiceDouble; void foo(const double (*)[3]); int main(int argc, char **argv) { double a[3][3] = {{1,2,3},{1,2,3},{1,2,3}}; foo((ConstSpiceDouble (*)[3])a); return 0; } 在实际代码中,typedef,函数定义和类型转换都在我控制之外的库中,否则我只需修复转换和匹配的函数。 这是我从编译器得到的消息: $ gcc -Werror -c test.c test.c: In function ‘main’: test.c:9:7: error: passing argument 1 of ‘foo’ from incompatible pointer type [-Werror=incompatible-pointer-types] foo((ConstSpiceDouble (*)[3])a); ^ test.c:4:6: […]
可能重复: C – “char var []”和“char * var”之间的区别? 我写了以下C代码 #include int main() { char name[31]; char *temp; int i ; scanf(“%s”,name); temp = name; name = temp; } 编译时出现以下错误 incompatible types when assigning to type ‘char[31]’ from type ‘char *’ 数组名称是指向第一个元素的指针(这里是char指针..right?)。 对吗?上面的代码意味着字符数组和char *是不同的类型。这是真的吗? 为什么要输入名称!= char *为什么我不能为char指针指定另一个char指针(数组名称)
在C中使用char缓冲区时,有时一次处理int数据块会更有用,也更有效。 为此,我可以将我的char *转换为int *并使用该指针代替。 但是,我并不完全相信这种方式与我认为的方式相同。 例如,假设我有char *data , *(int32_t *)data = -1总是覆盖字节data[0] , data[1] , data[2]和data[3]而没有其他字节?
我想要做的是遍历报价直到报价结束/(*报价中没有任何内容)。 我的代码有效吗? char *quote = “To be or not to be, that is the question.”; for (quote = 0; *quote != NULL; quote++){ *quote = tolower(*quote); }
是否有任何提示可以告诉我有关将结构,双精度,函数,…从C程序传递到C ++库并返回的指针?
我正在尝试学习如何(使用)C程序中的指针; 我的例子如下: #include #include int main(int argc, char *argv[]) { int * tab = (int*)malloc(sizeof(int)*5); int a =10; int *p; p = &a; printf(“the adress of a is%d \n”,&a); printf(“the adress of a using the pointer is%p \n”,p); printf(“the adress of tab is%d \n”,tab); } 我正在尝试打印a的地址, p的地址以及tab的第一个字节开始的位置。 使用”%p”时我可以获得hex值,但我愿意使用地址的十进制值。 编辑:在这个video 图像上 ,有人使用”%d”打印指针地址的十进制值,这让我很困惑。
我理解数组如何衰减到指针。 我明白,对于编译器,这个: void foo(int *arg1); 是100%相当于: void foo(int arg1[]); 一种风格应该优先于另一种吗? 我希望保持一致,但我很难为两种决定辩护。 虽然int main(int argc, char *argv[])和int main(int argc, char **argv)是相同的,但前者似乎更常见(如果我错了,请纠正我)。
嗨伙计们,我很抱歉打扰你,但我开始在这里松开它..我最近再次开始用C编程,我遇到了一些我无法弄清楚的错误..我的C程序是(应该)是一个简单的程序,因此它需要执行以下操作:从键盘读取未定义数量的自然元素,直到读取0。 之后,它必须计算所有元素的乘积,并在该结果的末尾计算0-s的数量。 int input(int* v) { int n = 0; do { n = n + 1; v = (int*) realloc(v,n*sizeof(int)); printf(“Enter number %d: “,n); scanf(“%d”,&v[n-1]); } while(v[n-1] != 0); n–; return n; } int tZeros(int* v, int eNb) { int i; int val = 1; for(i = 0; i 0) { int zeros = […]
我只是试图使用一个指向整数数组的void指针,我试着看看是否可以通过将数组转换回int来打印数组。 但它给了我一些随机价值。 你能告诉我哪里出错了吗? #include #include int main(){ int a[5]; int x; int j; a[0]=1; a[1]=2; a[2]=3; a[3]=4; void *arr=a; for(j=0;j<4;j++){ x = *(int *)(arr+j); printf("%d",x); } return 0; } 输出是这样的: 133554432131072512 为什么它不是针对数组的元素a []即1,2,3,4?
为什么以下确定? char *a; char b[]=”asdf”; a=b; 但以下不是? char a[10]; char b[]=”asdf”; a=b; 上面给出了错误:赋值中不兼容的类型。