关于*的简单C问题

时间:2011-01-12 16:24:55

标签: c variables pointers

我想知道这两行代码有什么区别?

int hi;
int *hi;

用C编程语言?

谢谢! 阿米特

8 个答案:

答案 0 :(得分:8)

int hi;

在内存中保留int的空间,每次引用hi时,您可以直接在内存空间中读取或写入int

int *hi;

在内存中保留pointerint的空间,每次使用hi时,都会读取或写入指针。这意味着你使用int,只有指向int的指针 - 必须在某处存在int指针引用可行的东西。例如

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

答案 1 :(得分:2)

int hi将变量hi声明为integerint *hi将变量hi声明为整数pointer

答案 2 :(得分:1)

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

指针超出了StackOverflow帖子的范围,但是this Wikipedia article是一个起点,在你用来学习C的任何书中都应该至少有一章指针。

答案 3 :(得分:1)

class WhichOne(var x:Int = 10) extends Base with Two with One { override def adder() = super.adder() } 将整数类型值存储在特定位置,但是 hi存储任何int类型变量的地址。

示例:

*hi

答案 4 :(得分:0)

一个。 int i;
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)并运行一些带有指针的程序,并检查您在代码中声明的每个变量。当我有任何问题的视觉图片时,我会更好地理解事物,我认为它也可以加快你对指针的理解。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

int *ptr = hi;
int *ptr;
ptr = &hi; 

当您更改ptr的值时,您更改其指向的地址,但如果在取消引用地址后更改了值,则更改另一个变量的值。

*ptr = 3;

导致改变hi的值;

答案 7 :(得分:0)

首先 - int hi ; 在这里你声明一个名为" hi"

的整数变量

然后 - int * hi ; 在这里"嗨"是一个可以指向整数值的指针

注意: int * hi和int * hi 在语法上是相同的