为什么c程序指针不起作用?

时间:2013-01-31 14:35:10

标签: c pointers

我正在学习c。的指点 我在下面写了这段代码,但它没有运行 问题是什么?

#include<stdio.h>
#include<conio.h>

int main()
{
    const int ARR_SIZE=5;
    int *arr;
    for(int i=0;i<ARR_SIZE;i++){
        *(arr+i) = i*10;
    }
    for(int i=0;i<ARR_SIZE;i++){
        printf("%d. Element is: %d\n",i+1,*(arr+i));
    }
    getch();
    return 0;
}

2 个答案:

答案 0 :(得分:6)

int *arr;

只是一个指针,它的工作是指向另一个地址。它应指向有效和足够的内存,以便您可以在该内存中写入内容 要么,

  • 在本地存储上分配一个数组,并将指针指向该数组或
  • 在堆上分配动态内存并将指针指向该内存。

解决方案1:

int array[ARR_SIZE];
int *arr = &array;

解决方案2:

int *arr = malloc(sizeof(int) * ARR_SIZE);
//...
//...
//Free the memory once done with usage
free(arr);

注意在解决方案2中,当您使用malloc分配内存时,必须通过调用free返回的地址上的malloc来显式释放内存。 在解决方案1中,您不必显式释放任何内容,因为array是本地/自动数组,当声明它的范围{}结束时,它会自动解除分配。

答案 1 :(得分:5)

你应该初始化arr:

int *arr = malloc(sizeof(int) * ARR_SIZE);
//... program
free(arr);