我想知道这两行代码有什么区别?
int hi;
int *hi;
用C编程语言?
谢谢! 阿米特
答案 0 :(得分: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 :(得分:2)
答案 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 在语法上是相同的