相关疑难解决方法(0)

为什么C++支持在结构中成员分配数组,但一般不支持?

我理解不支持成员分配数组,因此以下方法不起作用:

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 c++ arrays struct variable-assignment

82
推荐指数
2
解决办法
7481
查看次数

为什么我不能互换地分配两个具有相同内容的结构?

我正在努力学习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 struct

5
推荐指数
4
解决办法
1217
查看次数

结构中的数组

我是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解算器来规定参数的类型和顺序.

c arrays structure

1
推荐指数
1
解决办法
759
查看次数

将一个字符数组分配给另一个给出错误.为什么?

数组的名称是指向第一个元素的指针.那么为什么一个字符数组不能分配另一个数组呢?

#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)

c arrays string pointers assignment-operator

1
推荐指数
1
解决办法
661
查看次数

将数组分配给C中的Struct值

对于家庭作业,我们正在开发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:错误:赋值中的不兼容类型"有或没有指针那么...所以我不确定我应该如何分配该变量?帮助将不胜感激!

c arrays struct pointers

0
推荐指数
1
解决办法
4811
查看次数