2011-01-12 87 views
0

的简单C问题我想知道这两行代码有什么区别?关于*

int hi; 
int *hi; 

在C编程语言中?

谢谢! Amit

+0

感谢您的编辑,@Frustrated ... – Amit 2011-01-12 16:29:51

+2

你可能想要更深入地了解指针:http://www.eskimo.com/~scs/cclass/notes/sx10b.html – FrustratedWithFormsDesigner 2011-01-12 16:33:40

回答

8
int hi; 

储量任何书籍指针内存中的空间为int,并且每次当您引用hi时,都要在内存空间中直接读取或写入int

int *hi; 

保留用于pointer的空间在存储器中的int,每次hi被使用时,指针是读取或写入。这意味着你是而不是int一起工作,只有一个指向int的指针 - 必须存在int某处,以便指向某个可行的指针。例如

int hi; 
int *phi; 
phi = &hi; // phi references the int hi 
*phi = 3; // set `hi` to 3 
1

第一个声明一个整数变量,而第二个声明一个指向整数的指针。

指针超出出现StackOverflow职位的范围,但this Wikipedia article是一个起点,应该有至少一章里,你用学习C.

0

a。 b)。 int *address;
c。 address = &i;

在行中声明了一个名为i的整型变量。完成后,编译器会保留一个尺寸为sizeof(int)的存储空间(在我的计算机上是4个字节)。如果你想引用这个内存空间,那么你必须使用指针。

b行声明了一个名为address的变量,它有一个特殊的属性。该变量不包含int,但它存储类型为int的变量的地址。因此,无论值为address,它都应该被解释为类型为int的变量的地址。目前,变量address不包含任何内存地址,因为我们还没有定义它必须保存哪个变量的内存地址。

c行可以被读为“地址等于变量i的存储地址”。现在,变量地址存储int变量i的存储器地址。

int main(){ 
    int a; 
    int &b; 
    b=&a; 
    a=10; 
    return 0; 
} 

当该代码使用调试器我看到运行:

a = 10 // the variable's value 
b = 0x7fffffffe2fc // this is the address at which 'a' is stored. 

指针是非常强大的,你会开始更频繁,一旦你了解它使用它。除了其他人建议您阅读的材料外,我建议使用调试器(gdb)并运行一些带有指针的程序,并检查您在代码中声明的每个变量。当我有任何问题的视觉图像时,我会更好地理解事情,我认为这可能会加快您对指针的理解。

0

int hi ------表示hi是为其分配2个字节的整数。 int * hi ------ *表示保存变量地址的指针,该变量是一个整数。 两者都不同.one表示整数,另一个表示整数的地址。

0

int hi; 在内存中预留一个整数变量的位置,而 int * ptr; 在内存中为包含其他变量的内存地址的指针保留一个位置。你可以用不同的方式使用指针。

int *ptr = hi; 
int *ptr; 
ptr = &hi; 
当您更改值的PTR你改变它指向的地址

,但如果你去引用地址要更改其他变量的值更改后的值。

*ptr = 3; 

导致改变hi的值;

1

hi存储在一个特定位置上的整数类型的值,但
*hi存储任何int型变量的地址。

实施例:

int hi = 10; 
int *hello = &hi; 
0
首先

- INT喜; 这里你声明一个名为“hi”的整型变量

然后 - int * hi; 这里的“喜”是可以指向一个整数值的指针

注: INT *喜和INT *您好在语法上是相同的