[英]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
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.