
有关C语言中数组初始化问题
“只有在定义数组的时候才能{...}对全部元素初始化,例如:inta[3]={0,1,2};。其他情况下只能一个一个元素赋值,如a[4][0]=1;。”这句话对吗?因为我...
“只有在定义数组的时候才能{ ... }对全部元素初始化,例如:int a[3]={0,1,2};。其他情况下只能一个一个元素赋值,如a[4][0]=1;。”这句话对吗?因为我在定义了一个包含一个二维数组的结构,在初始化结构时用“{ ... }对全部元素初始化”的方法出错,不会只能一个个赋值初始化吧,我那个数组是10行10列的,一个个赋值不实际啊
展开
展开全部
这样赋值肯定出错。
一个简单的办法就是,你可以再定义一个和你邻接矩阵相同的矩阵在初始化函数中。比如,tmp_mat[SIZE][SIZE] ={...}
再G->linkArray = tmp_mat;就行了。
如果你觉得这样比较浪费空间,可以将结构体中的linkArray改为二级整形指针,在初始化的时候,指向一个初始化好的矩阵。
一个简单的办法就是,你可以再定义一个和你邻接矩阵相同的矩阵在初始化函数中。比如,tmp_mat[SIZE][SIZE] ={...}
再G->linkArray = tmp_mat;就行了。
如果你觉得这样比较浪费空间,可以将结构体中的linkArray改为二级整形指针,在初始化的时候,指向一个初始化好的矩阵。
追答
实在抱歉,昨天回答的有点着急。这个赋值没说清楚。
直接赋值是不行,回报左右类型不一致的错误。
因为你的二维数组是给定长度的,所以很好办。
参照我一下的代码就行了。
(为了方便验证,我只用了你矩阵的第一行,
然后复制了10行,注意修改成你要的矩阵。【十行都粘出来就超出回答字数了……晕】)
如果还有问题,可以继续追问。
P.S.
“只有在定义数组的时候才能{ ... }对全部元素初始化,例如:int a[3]={0,1,2};。其他情况下只能一个一个元素赋值,如a[4][0]=1;。”
这句话是对的。只能在数组初始化的时候,使用大括号进行复制。如果没有进行初始化,编译器会用默认值初始化这个数组,这个数组就相当与声明了,在后面想要再赋值只能取下标赋值。编译器要对你的代码进行解析,所以这是编译器来决定的(有兴趣可以看看《编译原理》)。
#include <stdio.h>
#include <string.h>
#define SIZE 10
typedef struct {
// ...
int linkArray[SIZE][SIZE];
// ...
} Graph;
void create_graph(Graph *G) {
int temp[][SIZE] = {
{0, 1, 0, 0, 0, 0, 0, 1, 0, 0}
//...
};
//使用memcpy对两个二维数组进行拷贝。函数详细信息可以百度下
memcpy(G->linkArray, temp, sizeof(int)*SIZE*SIZE);
}
int main() {
// use init function
Graph G;
int i, j;
//memset可以对二维数据进行初始化赋值,这里可以将G.linkArray中的元素都置为0
// memset(G.linkArray, 0, sizeof(int) * SIZE * SIZE);
create_graph(&G);
// ...
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询