将指针及其地址转换为整数指针

标签 c

下面两个赋值有什么区别?

int main()
{
    int a=10;
    int* p=  &a;

    int* q = (int*)p; <-------------------------
    int* r = (int*)&p; <-------------------------
}

我对这两个声明的行为感到非常困惑。
我什么时候应该使用一个而不是另一个?

最佳答案

int* q = (int*)p;

是正确的,尽管过于冗长。 int* q = p 就足够了。 qp都是int指针。

int* r = (int*)&p;

是不正确的(逻辑上,虽然它可能编译),因为 &p 是一个 int**r 是一个 int *。我想不出您会想要这个的情况。

关于将指针及其地址转换为整数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11450899/

相关文章:

c - 将函数的数组参数传递给前一个函数中使用的另一个函数

c - Linux中如何读取 "proc/pid/stat"中的开始时间数据来计算耗时?

c - 使用 pthread 获取总线错误 10

C 读取并替换字符

c - 在c中标记输入文件

c - 从不同函数访问分配的数组时出现 SegFault

c - 如何在win32应用程序中使用对话框?

C: 如何从dll API调用函数?

c - 将 typedef 引用为其对应的结构

c - 是 a[i]=y++; a[i++]=y;未定义的行为或未在 C 语言中指定?