将数组传递给指针

时间:2015-03-28 22:51:33

标签: c

我正在尝试使用指针和数组等学习C语言......但是我的代码不起作用。这段代码有什么问题?

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

int main(){

    int *number = 0;
    int i = 0;
    int *random = 0;
    int randomTry[100];
    int *getRandomTry = 0;
    int randomGenerator[100];
    int *getRandomGenerator = 0;
    srand (time(NULL));


    *getRandomTry = randomTry[100];
    *getRandomGenerator = randomGenerator[100];

    do{
        *random = rand() % 10;
        getRandomGenerator = random;
        printf("Choosing a number:\n\r");
        for(i = 0; i < 30; i++){
        printf("*");
        Sleep(50);
        }

    printf("\n\r\n\rWell done, your time.");
    printf("\n\r------------------------------");
        printf("\n\rPick a number ( 0 to 10): ");
        scanf("%d", number);
        getRandomTry = number;
        if(*number > 10){
            printf("\n\rRemember, number only from (0 to 10)\n\r");
        }
    else{
        if(number == random){
            printf("\n\rYou choose right!");
            printf("You entered theses numbers till the right answer");
            for(i = 0; i < randomTry[i]; i++){
                printf("%i", getRandomTry);
            }
        }
        else{
            printf("\n\rYou choose wrong, number: %d - random: %d\n\r", number, random);
            Sleep(700);
            system("cls");
        }
    }
    }while(number != random);


    getch();
    return 0;
}

当我编译程序停止工作时,控制台中不会显示任何警告或注释。

我正在使用带有MinGw的notepad ++来编译这段代码。

2 个答案:

答案 0 :(得分:3)

为NULL指针赋值是未定义的行为,例如(在您的代码中)。

   int *getRandomTry = 0;
   *getRandomTry = randomTry[100];

在两个计数上给出未定义的行为。第二个语句尝试检索不存在的randomTry[100]的值(因为数组索引从零开始,randomTry只有100个元素)。其次,它尝试将该值存储到NULL指针寻址的位置。

对于未定义的行为,任何事情都可能发生。程序崩溃很常见,但不是唯一可能的结果。

因此,您需要了解数组索引的工作原理(从零开始,而不是一个)。在尝试通过指针设置或检索值之前,您需要确保所有指针指向有效的东西。

例如;

 int x = 5;
 int *getRandomTry = &x;
 *getRandomTry = 42;       // will change x

答案 1 :(得分:-1)

以下是指向整数的指针的正确声明,初始值为零:

int *random = 0;

以下语句将尝试将计算结果放在内存中指针随机的地址中。指着:

*random = rand() % 10;

因为&#39;随机&#39;被赋值为0,它指向内存位置为零,第二个语句将导致“未定义行为”,这意味着程序中接下来发生的事情不容易预测。在实践中,它很可能会以某种方式崩溃,因为您无法写入内存位置0。

如果代码是这样的:

int random = 0;
...
random = rand() % 10;
然后一切都会好起来的。如果代码是这样的话,它也会起作用:

int random_variable;
int *random = 0;
...
random = &random_variable;
...
*random = rand() % 10;

在最后一种情况下,&#39; random_variable&#39;最终会得到计算结果。

希望这有帮助。