C语⾔之解引⽤
在《C和指针》上⾯看到“解引⽤”这个名词,就好奇的去查了查。
例:
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(void)
5 {
6    int a=10;
7    int *p=&a;
8    *p=5;//这就是⼀个解引⽤
9    system("PAUSE");
10    return 0;
11 }
在百度上⾯的解释是:"'解引⽤',我倒觉得可以从另⼀个⾓度理解,"*"的作⽤是引⽤指针指向的变量值,引⽤其实就是引⽤该变量的地址,"解"就是把该地址对应的东西解开,解出来,就像打开⼀个包裹⼀样,那就是该变量的值了,所以称为"解引⽤"。也就是说,解引⽤是返回内存地址中保存的值。",个⼈理解就是将指针p中的地址给解析出来。
看了之后还是迷糊迷糊的,于是上Google上查了“*”,维基上的解释是:“The asterisk is used to deference or to declare a pointer variable.”,在*p=5这⾥当然是前者的deferece了,但取消引⽤,什么是取消引⽤,取消什么呢?⾃⼰还是没有⼀个准确的概念,于是拿着这个问题请教了⾃⼰的师哥。花了近2个⼩时,终于明⽩了。
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(void)
5 {
6    int a=10;
7    int *p;
8    p=&a;
9    *p=5;
10    printf("%d\n",*p);
11    system("PAUSE");
12    return 0;
13 }
引⽤(看例题),相当于使指针p指向于a。我们可以先⼀步⼀步理解:
在内存中内存是⼀块⼀块的,这⾥的编号就是他们的地址。
明解c语言
int a=10;
先声明⼀个变量a给他⼀个⼩盒⼦,然后把10装进这个⼩盒⼦⾥⾯。
然后对指针p,先分配给他⼀个⼩盒⼦(指针也是变量)。
然后,
p=&a//往⼩盒⼦⾥⾯放a的地址
接着
*p=5;//往⼩盒⼦⾥⾯放东西
最后
printf("%d\n",*p);//看⼩盒⼦⾥⾯有什么
最后两⾏代码:⼀个写⼊数据,⼀个读取数据。这个就是解引⽤;
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(void)
5 {
6    int a=10;
7    int *p;
8    p=5;
9    system("PAUSE");
10    return 0;
11 }//这个代码不会炸(崩溃)
1  #include <stdio.h>
2  #include <stdlib.h>
3
4  int main(void)
5  {
6      int a=10;
7      int *p;
8      p=5;
9      *p=5;
10      system("PAUSE");
11      return 0;
12  }//这个代码炸了
原因就是:p=5;表⽰将整型值5存储到指针p中(在指针p中是作为地址存在哦)
     *p=5;表⽰将整型值5储存到指针p⼩盒⼦⾥⾯的地址指向的那个⼩盒⼦⾥⾯。(地址5你知道有东西吗!)附加:变量⼀旦确定,在C语⾔⾥⾯,地址是不可更改的,所以不要把p=5理解成把指针p的地址改成5.
下⾯是瞎玩的:~。~