01深入理解C指针之---指针含义符号

该系列文章源于《深入理解C指针》的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教。

1、指针的含义:

指针本身也是变量,与其他一般变量不同的是:指针变量中没有存储具体类型的数据,而是存储这一串16进制的值。这串值,就是内存的地址。计算机的OS运行时,管理内存过程中,为了高效管理内存,为内存进行编号,以字节为单位编号。而内存的地址存放到变量中。这样看来,指针的地址也是地址,指针变量中的值也是地址。

2、*符号的作用

(1)声明指针变量使用

(2)解指针变量,取出指针值中对应地址的值

3、&符号的作用

取变量的地址

请看例子,非常简单,但是说明的问题还是很多:

 1 #include <stdio.h>
 2 
 3 int main(int argc, char *argv)
 4 {
 5     int num = 10;
 6     int *numptr;
 7     numptr = &num;
 8     printf("Address num: %p, value num: %d\n", &num, num);
 9     printf("Address numptr: %p, value numptr: %p, value *numptr: %d\n", &numptr, numptr, *numptr);
10 
11     return 0;
12 }

第一次运行结果:

Address num: 0x7fffbfa6236c, value num: 10
Address numptr: 0x7fffbfa62360, value numptr: 0x7fffbfa6236c, value *numptr: 10

第二次运行结果:

Address num: 0x7ffdbff4ff0c, value num: 10
Address numptr: 0x7ffdbff4ff00, value numptr: 0x7ffdbff4ff0c, value *numptr: 10

(1)声明一个变量num,实际在计算机中num是代表地址,而地址就更加具体了,变量名只是让人看起来更加习惯,在计算中是不存在这个num变量的,很明显可以看出两次运行的结果中同样的num,地址是不一样的,但是这不会影响这个变量名为num,就向人的名字一样,取名字时都是可以随便取的一样。

(2)虽然两次的地址不一样,但是由于使用了相同的变量名num,所以使用变量访问是得到的就是同样的值为10

(3)例中我门使用了&取地址符号,顺利得到了num的地址,两次都不一样

(4)我们观察numptr的指针变量时,发现由于有第7行代码的作用,两次运行中,numptr的值,也就是指针代表的地址与num的地址是一样的,如果我们直接使用指针变量的变量名就是得到了num的地址,如果想进一步取得num的值,就须要*numptr,这时,*符号的作用就是取指针变量值(地址)对应的值,因此得到了num的值


 

posted @ 2015-03-30 11:12  叕叒双又  阅读(481)  评论(0编辑  收藏  举报