加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C矩阵,分配不是所有元素都是零?

发布时间:2020-12-16 10:21:15 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个小矩阵程序.使用双向指针不起作用所以我认为最简单的方法是使用#rows和#columns以及1d数组作为矩阵的结构. 但是我得到的矩阵启动有一些错误: 索引(0,0)和(0.1)的奇怪值而不是0. 也许有这样的东西: matrix * mtrx = malloc(sizeof(matrix
我正在尝试编写一个小矩阵程序.使用双向指针不起作用所以我认为最简单的方法是使用#rows和#columns以及1d数组作为矩阵的结构.

但是我得到的矩阵启动有一些错误:
索引(0,0)和(0.1)的奇怪值而不是0.

也许有这样的东西:
matrix * mtrx = malloc(sizeof(matrix));
mtrx-> m = malloc(r * c * sizeof(int));

matrix.c:

#include <stdio.h>
#include <stdlib.h>
#include "Matrix.h"

matrix *alloc_matrix(int r,int c)
{
 matrix *mtrx = malloc(sizeof(matrix));
 mtrx->m = malloc(r * c * sizeof(int));
 if (mtrx == NULL || m == NULL) {
   printf("Out of memory.");
   exit(1);
 }
 mtrx->rows = r;
 mtrx->columns = c;
 return mtrx;
}

void free_matrix(matrix *mtrx)
{
 free(mtrx->m);
 free(mtrx);
}

void set(matrix *mtrx,int r,int c,int v)
{
 (mtrx->m)[r * mtrx->columns + c] = v;
}

int get(matrix *mtrx,int c)
{
 return (mtrx->m)[r * mtrx->columns + c];
}

void print_matrix(matrix *mtrx)
{
 int i,j;
 printf("n");
 for(i=0; i<mtrx->rows; i++) {
   for(j=0; j<mtrx->columns; j++) {
     printf("%i ",get(mtrx,i,j));
   }
   printf("n");
 }
}

matrix.h:

struct matrix_ {
 int rows;
 int columns;
 int *m;
};
typedef struct matrix_ matrix;

matrix *alloc_matrix(int r,int c);
void free_matrix(matrix *mtrx);
void set(matrix *mtrx,int v);
int get(matrix *mtrx,int c);
void print_matrix(matrix *m);

main.c中:

#include <stdio.h>
#include <stdlib.h>
#include "Matrix.h"

int main(void)
{
 matrix *m = alloc_matrix(3,4);
 print_matrix(m);
 printf("nm[0][0] = %i",get(m,0));
 set(m,0);
 printf("nm[0][0] = %i",(m->m)[0]);
  printf("nm[0][0] = %i",(m->m)[12]);

 return 0;
}

输出:
除(0,0)和(0,1)之外的所有元素都是0.

解决方法

函数 malloc分配一块内存,返回指向块开头的指针.它不会将所有位设置为零.

分配一块内存并将其所有位初始化为零 – 这就是calloc的功能.

或者,您可以使用memset将这些位显式设置为零

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读