【问题标题】:C create a matrix of BignumC创建一个Bignum矩阵
【发布时间】:2018-07-02 08:46:22
【问题描述】:

我正在尝试在 C 中创建一个矩阵,其中每个元素都是一个 Bignum(来自 Openssl 库)。 我在想它会是这样的,但它不起作用。

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();
    }

  }

我将不胜感激。

【问题讨论】:

  • “它不起作用”是什么意思?
  • 此声明 BIGNUM *p [2][2] = NULL;没有意义。
  • 你在这里看到的是一个指向 bignums 的二维指针数组。但是你说你想要一个二维的 bignums 数组。 BIGNUM p[2][2] 也是如此

标签: c matrix openssl bignum


【解决方案1】:

通过将指针解引用放在 *p[2][2] 中,您引用的地址太远了。 (星号)

你应该可以使用这样的东西:

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();

【讨论】:

    【解决方案2】:

    我假设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 值。这是可行的,因为索引运算符[] 优先于间接运算符*

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      相关资源
      最近更新 更多