指针基础知识
要理解指针,它有助于变量比较正常。
一个“正常的”变量是一个内存中的位置,可以容纳一个值。例如,当你声明一个变量我作为一个整数,四个字节的内存预留。在你的程序中,你提到在内存的位置名称我。在机器的水平位置的内存地址。四个字节的地址是已知的,程序员,我,四个字节可以容纳一个整数值。
广告
一个指针是不同的。指针是一个变量点到另一个变量。这意味着持有另一个变量的内存地址的指针。换句话说,指针不举行一个传统意义上的价值;相反,它是另一个变量的地址。“指向”,另一个变量的指针,其地址的副本。
因为一个指针是一个地址,而不是一个值,它有两个部分。指针本身拥有的地址。该地址指向一个值。的指针和指向的值。这个事实可能会让人有些迷惑,直到你熟悉它,但一旦你得到舒适变得极其强大。
下面的示例代码显示了一个典型的指针:18新利最新登入
# include < stdio。h > int main () {int i, j。int * p;/ *整数指针* / p =我;* p = 5;j =我;printf (" % d % d % d \ n”,我,j * p);返回0;}
第一个声明在这个程序中声明了两个正常的整数变量命名我和j。这条线int * p声明一个指针命名p。这条线要求编译器声明一个变量p这是一个指针一个整数。的*表明一个指针声明而不是一个正常的变量。您可以创建一个指针指向什么:一个浮点数,一个结构,一个字符,等等。只使用一个*表明你想要的而不是一个普通的变量的指针。
这条线p =我;肯定会是新的给你。在C语言中,&被称为地址运算符。表达式我意思是“变量的内存地址我”。因此,表达式p =我;意思是“分配p的地址我”。一旦你执行这个语句,p“点”我。在你这样做之前,p包含一个随机的,未知的地址和它的使用可能会导致段错误或类似的程序崩溃。
想象正在发生的事情的一个好方法是画一幅图。后我,j和p声明,世界看起来像上图。
在这幅图的三个变量我,j和p已经宣布,但没有三个已初始化。两个整数变量因此吸引框包含问号——他们可以包含任何值在程序的执行。指针是画一个圆,区别于普通变量包含一个值,和随机箭头表明它可以指向任何地方。
线后p =我;,p初始化和它指向我像这样:
一次p指出我的内存位置我有两个名字。它仍然是被称为我,但现在它被称为* p。这就是C谈到一个18新利最新登入指针变量的两个部分:p是位置的地址,而* p是位置指向的地址。因此* p = 5意味着指出的位置p应该设置为5,像这样:
因为位置* p也我,我还需要5的值。因此,j =我;集j5,printf声明中产生5 5 5。
一个指针的主要特征是其两部分的性质。指针本身拥有一个地址。的指针也指向一个特定类型的价值——在解决点的值。指针本身,在这种情况下,p。的价值指向* p。