Tag: 变量赋值

选择使用结构数组在C中排序,错误:“需要左值”

试图对一组Structs进行排序。 Struct是下面定义的TextArt typedef struct //struct that holds ASCII art { char artistName[80]; //name of artist char asciiArt[20][80]; //actual ascii art line by line int rating; //rating of art }TextArt; 我不认为结构与此有任何关系。 我得到编译器错误 错误:当尝试将一个结构分配给另一个结构时,左值作为赋值的左操作数(见下文) temp = asciiArt+pos_min; asciiArt+pos_min = asciiArt+i; //error here asciiArt+i = *temp; //error also here 呼吁运作 selectionSort(artPtr, artArrSize); 和全选择排序function。 有什么我不明白用C =在C中分配结构吗? 我以为是这个或者我对TextArt数组的传递在某种程度上是错误的。 请赐教,谢谢。 void […]

pthread编程中的共享数据

在pthread编程中我仍然不太确定。 如果有人能告诉我一个绝对的答案,我将不胜感激。 我之前的问题是: 如何在简单的Pthread编程中分配数组变量? 现在,我正在研究矩阵乘法。 它使用这个很好用: typedef struct { int rowIdx; int (*matA)[SIZE], (*matB)[SIZE], (*matC)[SIZE]; } newType; int main (){ int matriksA[SIZE][SIZE]; int matriksB[SIZE][SIZE]; int matriksC[SIZE][SIZE]; for (i=0;i<NUM_THREAD;i++) { (*block).rowIdx = i; (*block).matA = matriksA; (*block).matB = matriksB; (*block).matC = matriksC; pthread_create(&arrThread[i], NULL, matrixMul, (void *)block); block++; } } void *matrixMul(void *x){ newType *p = […]

const指针修复变量变量

我无法弄清楚如何告诉C我想要一个不会移动的指针。 它总是指向同一个数组。 也就是说,数组成员不是常量,但数组本身是全局的,因此,它处于固定位置。 所以,当我编码时: #include int v[2]={0, 1}; const int *cpv=v; int main(void) { v[1]=2; printf(“%d\n”, v[1]); *(cpv+1)=3; printf(“%d\n”, v[1]); cpv[1]=4; printf(“%d\n”, v[1]); } 并得到这个错误: constp.c: In function ‘main’: constp.c:9: error: assignment of read-only location ‘*(cpv + 4u)’ constp.c:10: error: assignment of read-only location ‘*(cpv + 4u)’ 我知道编译器认为我需要一个const int v[2]来使用const int *iv 。 如何获得一个常量指针来完成这项工作? 如果你看到错误信息,我甚至没有移动指针(如pv++ […]

C / C ++数组赋值

示例代码: int ar[3]; ………… ar[0] = 123; ar[1] = 456; ar[2] = 789; 有没有办法让它缩短? 就像是: int ar[3]; ………… ar[] = { 123, 456, 789 }; 我不需要解决方案: int ar[] = { 123, 456, 789 }; 定义和初始化必须是分开的。

是否有针对&=和| =的定义评估顺序?

如果你有一个返回整数的C函数,你可以写一个这样的语句: MyInt &= MyFunc(); …我们使用按位AND赋值运算符。 问题是:即使MyInt等于零,MyFunc()仍然可以执行吗? Likwise,如果我们使用按位OR赋值运算符(| =),那么MyFunc()总会被执行,即使MyInt被设置为全部吗? 换句话说:对于按位运算符,C是否允许延迟评估?

防止分配数组的理由是什么?

我试过谷歌这个并阅读: 为什么不能分配相同类型和大小的数组? 分配数组 在c中分配给struct中的数组 但他们都说得很明显:你不能分配给数组,因为标准是这样说的。 这很好,但我想知道为什么标准不包括对分配数组的支持。 标准委员会详细讨论了一些事情,如果他们从未讨论过让arrays可分配,我会感到惊讶。 假设他们已经讨论过,他们必须有一些理由不让数组被分配。 我的意思是,我们可以将一个数组放在一个结构中并分配给结构就好了: struct wrapper { int array[2]; }; struct wrapper a = {{1, 2}}; struct wrapper b = {{3, 4}}; a = b; // legal 但是禁止直接使用数组,即使它有效地完成了同样的事情: int a[2] = {1, 2}; int b[2] = {3, 4}; a = b; // Not legal 标准委员会禁止分配数组的理由是什么?

对于struct变量s1,s2,为什么我可以初始化“s1 = {25,3.5}”,将s2指定为“s1 = s2”,但是不能使用“s1 = {59,3.14}?

在C中,如果它们属于同一类型,我们可以将一个结构变量的值赋值给另一个。根据这个,在我的下一个程序中,当两者都是相同类型的struct变量时,我可以使用s1=s2 。但为什么之后我不允许使用s1={59,3.14} ? 我知道我们不能将字符串”Test”分配给字符数组arr而不是初始化语句,因为对于字符串”Test” ,它在赋值期间分解为char*类型,因此存在类型不匹配错误。但是我的程序{59,3.14}不会分解为任何指针,是吗?为什么然后它不允许被分配给s1即使它是相同的类型,特别是因为在初始化期间允许它?什么是在s2和{59,3.14}之间有所不同,以便允许一个被分配给s1而另一个不被分配给s1 。 #include int main(void) { struct test1 { int a; float b; } s1= {25,3.5},s2= {38,9.25}; printf(“%d,%f\n”,s1.a,s1.b); s1=s2; // Successful printf(“%d,%f\n”,s1.a,s1.b); s1= {59,3.14}; //ERROR:expected expression before ‘{‘ token| printf(“%d,%f\n”,s1.a,s1.b); }

在C中为结构指针数组成员分配地址

一些指针算术有相当大的麻烦。 我想我得到了概念(指针变量指向内存地址,正常变量指向数据)但我相信我的问题是语法( *, &, (*), *(),等) 我想要做的是构建一个自定义结构的动态数组(即指向堆结构的指针数组),我的界面提供了两个方法,“ad_to_obj_array”(它将对象添加,而数组可以为null为空)和“obj_array_dustbin”(它只是处理数组,也处理内容,堆objs)。 前者呈现如下。 对象的细节并不重要(并且结构已经重命名)但是我对一般问题的解决方案如下,如果您能发现错误,我将不胜感激。 编译器抱怨无效的左值,我尝试将RHS上的指针中的地址分配给堆结构指针数组中的指针值: #define NUM_ELEM(x) (sizeof (x) / sizeof (*(x))) obj* add_to_obj_array(obj* new_obj, obj* array) { int number_of_elements = 0; if (array != NULL) { number_of_elements = NUM_ELEM(array); } obj* new_array = NULL; /* note: I am expecting sizeof(new_obj) to return the size of an obj* to go […]

指针初始化给出了分段错误

我写了一个C程序如下: 情况1 int *a; /* pointer variable declaration */ int b; /* actual variable declaration */ *a=11; a=&b;/* store address of b in pointer variable*/ 它在运行程序时出现分段错误。 我更改了代码如下: 案例2 int *a; /* pointer variable declaration */ int b; /* actual variable declaration */ a=&b;/* store address of b in pointer variable*/ *a=11; 现在它工作正常。 如果有人知道请解释为什么它在CASE 1中给出了分段错误。

变量的声明如何表现?

#include #include int main(){ char i; int c; scanf(“%i”,&c); scanf(“%c”,&i);// catch the new line or character introduced before x number printf(“%i”,i);// value of that character getch(); return(0); } 程序将以与下一个变量声明相同的方式运行,而不是上述变量声明: 这个: int c; int *x; int i; 或这个: int *x; int c; int i; 并且只有这样: c变量和i变量之前的x指针。 我知道那些最后的声明没有意义, int i而不是char i ,以及一个甚至不需要的添加指针。 但这是偶然发生的,我想知道这是否只是一个巧合。