我正在尝试用C语言创建一个矩阵,其中每个元素都是一个Bignum (来自Openssl librairy)。我想它应该是这样的,但它不起作用。
BIGNUM *p [2][2] = NULL;
int i; int j;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
*p[i][j] = BN_new();
}
}如果有任何帮助,我将不胜感激。
发布于 2018-01-24 04:00:13
我假设BN_new()的返回类型是BIGNUM *。
由于BIGNUM *p[2][2]是一个2*2数组,并且元素的数据类型是BIGNUM*,因此对数组p的元素的赋值如下所示:
p[i][j] = BN_new(); 这意味着您的代码应该如下所示:
BIGNUM *p[2][2] = {NULL, NULL, NULL, NULL};
for( int i=0; i<2; ++i ) {
for( int j=0; j<2; ++j ) {
p[i][j] = BN_new();
}
}表达式*p[i][j]将通过指针p[i][j]间接访问BIGNUM值。这是可行的,因为索引操作符[]优先于间接操作符*。
发布于 2018-01-23 22:11:35
通过将指针放在*p2中取消引用,您引用的地址太多了。(星号)
您应该能够使用下面这样的内容:
BIGNUM p[2][2];
int i; int j;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
p[i][j] = BN_new();
}
}还可以使用另一种方法,您可以在其中使用width=2和height=2
BIGNUM *p = calloc(width * height, sizeof(BIGNUM));然后使用如下形式引用它(示例中的变量):
p[i*width+j] = BN_new();https://stackoverflow.com/questions/48403289
复制相似问题