我理解不支持成员分配数组,因此以下方法不起作用:
int num1[3] = {1,2,3};
int num2[3];
num2 = num1; // "error: invalid array assignment"
Run Code Online (Sandbox Code Playgroud)
我只是接受了这个事实,认为该语言的目的是提供一个开放式框架,并让用户决定如何实现诸如复制数组之类的东西.
但是,以下工作正常:
struct myStruct { int num[3]; };
struct myStruct struct1 = {{1,2,3}};
struct myStruct struct2;
struct2 = struct1;
Run Code Online (Sandbox Code Playgroud)
该数组num[3]是从其实例中成员分配struct1到其实例中的struct2.
为什么结构支持成员方式的数组,但一般情况下不支持?
编辑:Roger Pate 在结构中的线程std :: string中的注释- 复制/赋值问题?似乎指向答案的大致方向,但我不知道自己确认.
编辑2:许多出色的回应.我之所以选择Luther Blissett,是因为我对这种行为背后的哲学或历史原理很感兴趣,但James McNellis对相关规范文档的引用也很有用.
我正在努力学习C而且我遇到了一些奇怪的东西:
struct
{
int i;
double j;
} x, y;
struct
{
int i;
double j;
} z;
Run Code Online (Sandbox Code Playgroud)
在这里,你可以看到我创建了两个struct在元素中相同的s.
为什么当我尝试分配x = z它时会产生编译错误但x = y不会?它们具有相同的内容,为什么我不能相互分配它们,无论如何?
我有什么方法可以做到这一点,所以我可以分配x = z?或者他们只需要是一样的struct.
任何C大师能指出我正确的方向吗?
我是C的新手,在嵌入结构时遇到阵列类型问题.以下是我的问题的一个例子:
typedef struct {
double J[151][151];
} *UserData;
static int PSolve(void *user_data, N_Vector solution)
{
UserData data;
data = (UserData) user_data;
double J[151][151];
J = data->J;
/* Solve a matrix equation that uses J, stored in 'solution' */
return(0);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译这个时,我得到错误:从类型'double(*)[151]'分配类型'double [151] [151]'时出现不兼容的类型
我目前的解决方法是用代码中的'data-> J [x] [y]'替换'J [x] [y]'来求解矩阵方程,但是分析表明这样效率较低.
将参数更改为PSolve不是一个选项,因为我正在使用sundials-cvode解算器来规定参数的类型和顺序.
数组的名称是指向第一个元素的指针.那么为什么一个字符数组不能分配另一个数组呢?
#include<stdio.h>
int main()
{
char str1[]="Hello";
char str2[10];
char *s="Good Morning";
char *q;
str2=str1; /* Error */
q=s; /* Works */
return 0;
}
Run Code Online (Sandbox Code Playgroud) 对于家庭作业,我们正在开发CSV解析器.我正在尝试让事情奏效,但我遇到了一个问题.我似乎无法为结构中的"字段"值赋值.在他们提供的代码中,他们有:
typedef char f_string[MAX_CHARS+1] ; /* string for each field */
typedef struct {
int nfields; /* 0 => end of file */
f_string field[MAX_FIELDS]; /* array of strings for fields */
} csv_line ;
Run Code Online (Sandbox Code Playgroud)
使用上面定义的20和15的常量.看看它们有什么,struct hold和int,它包含一个数组,应该使用前面定义的f_string typedef填充它.好吧,很酷.我试着这样做:
f_string test = "Hello, Bob";
f_string testAgain = "this is dumb, k?";
f_string anArray[MAX_FIELDS] = {*test, *testAgain};
csv_line aLine;
aLine.nfields = 3;
aLine.field = *anArray;
Run Code Online (Sandbox Code Playgroud)
当我制作"anArray"时,如果我没有测试和testAgain的解释,我会收到关于在没有演员表的情况下对指针进行整数的警告.所以我把它们留在了.但是这条线:
aLine.field = *anArray;
Run Code Online (Sandbox Code Playgroud)
返回错误:"csv.c:87:错误:赋值中的不兼容类型"有或没有指针那么...所以我不确定我应该如何分配该变量?帮助将不胜感激!