繁体   English   中英

关于*的简单C问题

[英]Simple C question regarding *

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

int hi;
int *hi;

使用C编程语言?

谢谢! 阿米特

int hi;

在内存中保留一个int的空间,并且每次您引用hi ,您都可以在内存空间中直接读取或写入该int

int *hi;

每次使用hi ,都会为内存中的int pointer保留空间,该指针将被读取或写入。 这意味着你没有与工作int ,只有一个指向int -必须存在一个int某处为指针引用一些可行的。 例如

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

int hi声明变量hi为整数 int *hi声明变量hi为指向整数的指针

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

范例:

int hi = 10;
int *hello = &hi;

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

指针不在StackOverflow文章的讨论范围之内,但是这篇Wikipedia文章是一个起点,无论您使用什么学习C的书,都应该至少有一个关于指针的章节。

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

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

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

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

*ptr = 3;

导致改变hi的值;

先入为主 ; 在这里,您声明一个名为“ hi”的整数变量

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

are syntactically same 注意: 在语法上是相同的

一种。 int i;
b。 int *address;
C。 address = &i;

在此声明了一个名为i的整数变量。 完成此操作后,编译器将保留大小为sizeof(int)的内存空间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)并运行一些带有指针的程序,并检查您在代码中声明的每个变量。 当我对任何问题有直观的了解时,我会更好地理解事情,并且我认为这可能会加快您对指针的理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM