【发布时间】:2018-01-17 10:11:06
【问题描述】:
我有 2 个关于 c 指针的问题。
1) 据我了解,& 返回变量的内存地址。例如:
int x=10;
int *p=&x;
所以我认为& 将返回x 的内存地址,并且该内存地址是int* 类型,因为x 的变量类型是int。
还因为地址的类型是int*,我相信这就是只有int*(和void *)指针才能指向地址的原因(它们是相同的类型)。
对此有什么想法吗?厘米?我不知道我是否正确。
2) 关于 void 指针。我知道void* 指针可以指向任何类型的变量。例如
int x=10;
void *ptr=&x;
现在我有一个函数:
void * foo(some parameters)
{
// just for this example let's say that I return the address of a local variable
// I know that is wrong to do so because when the foo ends
// the local variables deallocate
int k=10;
void *ptr=&k;
return ptr;
}
所以我的指针是void 类型,但它指向int* 内存地址。所以ptr 将保存k 的地址,当我返回ptr 时返回k 的地址,即int* 类型。但我的函数是输入void*。
这里发生了什么?
【问题讨论】:
-
请编辑您的问题并修正代码格式和缩进。
-
请一次只问一个问题。
-
你展示的函数返回的指针是无效的,因为它指向函数内部的一个局部变量,而该变量的生命周期在函数结束时结束。
-
有点话题,但是将指针返回到局部变量是个坏主意,请阅读this
标签: c pointers memory-address