当你在c中声明一个静态变量时

时间:2015-02-03 07:00:15

标签: c pointers malloc

在C中声明静态变量时

说你写了一个程序:

int *c;
void foo(){
    c = (int *) malloc (10*sizeof(int));
    c = &c[3];
    *c = *&c[3];
}

拥有*c是什么意思?我的意思是我理解*意味着它指的是某些东西,但*c做了什么?

并且,为什么需要将(int *)的返回值转换为malloc()

2 个答案:

答案 0 :(得分:5)

  

在C

中声明静态变量时

与此问题无关,或至少与您所显示的代码无关。

  

但是* c做了什么?

假设您的问题与语句*c = *&c[3];相关,则它引用c所持有的地址处的对象。

  

为什么你必须在malloc前面转换(int *)?

你不应该。请do not cast malloc() [和家人]的返回值。

注意:您的代码片段非常糟糕且做法不好,最有可能无效。 c = &c[3];明显的内存泄漏。功能

答案 1 :(得分:0)

  

我的意思是我明白*意味着它指的是什么,但* c做什么?

*并不总是意味着它指向某种东西。 例: 如果你这样写:

int* c;

这意味着c是指向int变量的指针。

当你这样做时:

int* c = &x;
*c = 5;

第二个*是指针c dereference.