rand()不产生随机[E]

use*_*268 1 c random

我被要求编写一个程序,生成一个随机数的二维数组.我的代码产生奇怪的结果.无论矩阵的大小如何,它都会产生"反向对角矩阵"(不知道还有什么可以称之为).我要理解rand()产生一个介于0和RAND_MAX之间的伪随机数,但不知何故结果取决于我的矩阵的大小,我不确定这种行为是如何发生的.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAT_SIZE 5

void main (void)
{

srand(time(0));

unsigned char * ptr = malloc(MAT_SIZE*MAT_SIZE);
unsigned char i, j;

for(i = 0; i < MAT_SIZE; i++)
{
    for(j = 0; j < MAT_SIZE ; j ++)
    {

        *(ptr + i + j ) = rand();
    }
}
 for(i = 0; i < MAT_SIZE ; i++)
{
    for(j = 0; j < MAT_SIZE ; j ++)
    {
        printf("%5d", *(ptr + i + j));
    }
    printf("\n");
}
    free(ptr);
}
Run Code Online (Sandbox Code Playgroud)

输出为3*3

142  141   11
141   11  230
11   230   28
Run Code Online (Sandbox Code Playgroud)

输出为5*5

232  157   62  131  245
157   62  131  245   54
 62  131  245   54  138
131  245   54  138  246
245   54  138  246  108
Run Code Online (Sandbox Code Playgroud)

即使伪随机数也不应根据其使用方式而有所不同.是否有一些我不理解强制这些结果的程序?

Doc*_*Max 8

问题不在于生成的随机数,而在于如何将它们保存在矩阵中.要访问(j, i)您不想要的元素

*(ptr + i + j )
Run Code Online (Sandbox Code Playgroud)

*(ptr + MAT_SIZE * i + j )
Run Code Online (Sandbox Code Playgroud)