在C中声明静态变量时
说你写了一个程序:
int *c;
void foo(){
c = (int *) malloc (10*sizeof(int));
c = &c[3];
*c = *&c[3];
}
拥有*c
是什么意思?我的意思是我理解*
意味着它指的是某些东西,但*c
做了什么?
并且,为什么需要将(int *)
的返回值转换为malloc()
?
答案 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.