简单C问题关于*
我想知道这两行代码之间的区别是什么简单C问题关于*,c,variables,pointers,C,Variables,Pointers,我想知道这两行代码之间的区别是什么 int hi; int *hi; 在C编程语言中 谢谢! Amitinthi将变量hi声明为一个。 int*hi将变量hi声明为一个整数。第一个声明一个整数变量,而第二个声明一个指向整数的指针 指针超出了StackOverflow post的范围,但它是一个起点,在学习C的任何一本书中都应该至少有一章介绍指针 int hi; 在内存中为int保留空间,每次引用hi时,您可以在内存空间中直接读取或写入该int int *hi; 在内存中为指向int的指针保
int hi;
int *hi;
在C编程语言中
谢谢!
Amit
inthi
将变量hi声明为一个。
int*hi
将变量hi声明为一个整数。第一个声明一个整数变量,而第二个声明一个指向整数的指针
指针超出了StackOverflow post的范围,但它是一个起点,在学习C的任何一本书中都应该至少有一章介绍指针
int hi;
在内存中为int
保留空间,每次引用hi
时,您可以在内存空间中直接读取或写入该int
int *hi;
在内存中为指向int
的指针保留空间,每次使用hi
时,都会读取或写入指针。这意味着您没有使用int
,只有指向int
的指针-必须存在int
,指针才能引用可行的内容。比如说
int hi;
int *phi;
phi = &hi; // phi references the int hi
*phi = 3; // set `hi` to 3
a<代码>inti代码>
b<代码>整数*地址代码>
c<代码>地址=&i代码>
在a行中声明了一个名为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)并运行一些带有指针的程序,并检查代码中声明的每个变量。当我对任何问题有一个直观的了解时,我会更好地理解事情,我认为这可能会加快你对指针的理解 int hi-----表示hi是为其分配2个字节的整数。
int*hi-----*表示保存变量地址的指针,该变量为整数。
两者都不同。一个表示整数,另一个表示整数的地址。inthi;
在内存中为整型变量保留一个位置,同时
int*ptr;
在内存中为包含其他变量的内存地址的指针保留一个位置。您可以以不同的方式使用指针
int *ptr = hi;
int *ptr;
ptr = &hi;
当您更改ptr的值时,您将更改其指向的地址,但如果您在取消引用地址后更改了该值,则您将更改其他变量的值
*ptr = 3;
导致hi值的改变 hi
将整型值存储在特定位置,但
*hi
存储任何int类型变量的地址
例如:
int hi = 10;
int *hello = &hi;
第一-国际hi;
这里声明一个名为“hi”的整数变量
然后-int*hi;
这里的“hi”是一个指针,可以指向整数值
注意:int*hi和int*hi在语法上是相同的感谢您的编辑,@failured…您可能想更深入地理解指针:太棒了。这正是我想知道的。我能再问你一个问题吗?我见过指针被广泛使用。为什么?为什么它们如此特别?为什么有些人更喜欢使用指针而不仅仅是整数?对不起,不是指整数,而是指整数变量。再加一句,对不起。如果我有这样的东西:inthi[4];int*phi;phi=&hi[2]
这将为phi提供hi
数组的第三个(假设为0索引)值。现在有没有可能在没有指针的情况下实现这一点?例如:inthi[4];int-phi;phi=hi[2]代码>。这不也是一回事吗?如果是这样的话,我现在终于明白为什么指针是有用的了。@Amit为什么使用指针?C和C++允许间接的级别(不像java,至少不是直接的)。根据您的示例,您可以在内存中保留一个整数字符串(数组),并有一个指向该区域的指针,即第一个。然后,该语言允许使用指针、post或pre增量等方便地在该字符串中导航。。。按照相同的方案,您可以只提供一个指向int
字符串的指针,而不是提供整个数组。允许对指针等进行操作。。。(比如,试着用谷歌搜索“c指针”。@Amit IIphi=&hi[2]
将phi设置为hi
的第三个int所在的内存位置的地址。然后,*phi=4代码>将hi[2]
设置为4。你可以做phi=&hi*(φ+2)=4对于相同的效果,甚至phi[2]=4代码>。