2017-07-17 86 views
-4

我尝试Ubuntu的终端概念在C指针不明确

int main() { 
    int y = 10; 
    int *int_ptr; 
    int_ptr = (int *) y; 
} 

我分配在program.I这些代码想知道有关的步骤说明正确执行上面的代码的代码。在最后一行代码中,如果它是int_ptr =&y; 我没有问题,但与我的代码我没有得到我指向int_ptr指针。

+5

你明白'y'和'&y'的区别吗? –

+4

阅读一本关于'C'的好书 – dlmeetei

+1

我们不是老师,在线免费学习基础C课程。 –

回答

4
int *int_ptr; 

int_ptr是指存储int类型的变量的地址。 要获取变量说的地址int t您需要使用&运算符。 但通过做你刚刚做的你刚刚分配的整数10到int_ptr

当你声明变量说

int x = 34; 

有两样东西在作怪:

  • 说0x10000的是,其中x存储地址;该地址通过&运营商获得。
  • 和34是x的值。

要通过指针访问x,您需要第一个值。

0

用最后一行,你分配给int_ptr地址0x0000000A。 因此,对于* int_ptr,您正在读取地址存储在0x0000000A处的内存块。

0

发布代码时发生错误,但会投标(int *)正在遮罩它。

你应该好好y的地址,使int_ptry

int main(void) { 
    int y = 10; 
    int *int_ptr; 
    int_ptr = &y; 
} 

使用转换,你是在告诉你知道你在做什么,编译器和真要到转换值y作为地址int存储到int_ptr。如果没有转换,编译器应该发出警告,告诉您可能发生的编程错误。