赞
踩
前言: 谈到指针,似乎大家对它的印象是难,以至于认为自己学不会指针,但是指针是c语言的精华部分,c语言对比其他语言的一个大的优势就是指针,指针在c语言的学习中扮演了至关重要的角色,指针如果不学,后面的内容也很难学得会,俗话说基础不牢,地动山摇。那么学习指针有什么好的方法吗,首先情绪上克服对指针的恐惧,计算机里没有黑魔法,计算机内部的所有东西都是人造的,别人能学会的,我们也一定能学会,我们要有不惧困难的精神,在学习编程的道路上我们会遇到比指针更难的知识点,只要行动起来,我们要相信自己一定能学会。
学习c语言,我们都知道指针,却不知到指针的本质,指针是内存中的一块地址,而我们口中的指针,是一个用来存放地址的变量,也叫指针变量。
总结:指针就是地址,人们口中的指针是一个用来存放地址的变量
那么地址是怎么一回事呢?在内存中,cpu为每个字节都进行编号,而每个字节的编号就是它的地址,如果我们想找到某个字节,只需要通过它的地址便可以访问这个字节。
- #include <stdio.h>
- int main()
- {
- int a = 10;//在内存中开辟一块空间
- int *p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符。
- //a变量占用4个字节的空间,这里是将a的4个字节的第一个字节的地址存放在p变量
- 中,p就是一个指针变量。
- return 0;
- }
总结: 指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。
那么一个指针变量占多大空间呢,答案是指针变量在32位平台下就是4个字节,在64位平台下就是8个字节。
我们都知道,变量有不同的类型,有整型,短整型,长整型,字符型,单精度浮点型,双精度浮点型......
指针有没有类型呢,确定的说:有,但是马上又有疑问了,前面我们提到指针在32位台下占四个字节,在64位平台下占8个字节,那么指针分类型有什么意义呢,不都是存储地址的变量吗,是的,指针变量都是存储地址的变量,但是,不同类型的指针是有区别的,下面我将解释不同类型指针变量的区别。
在了解不同类型指针变量的区别之前,我们先了解指针变量是如何定义的
- char* pc = NULL;
- int* pi = NULL;
- short* ps = NULL;
- long* pl = NULL;
- floa* pf = NULL;
- double* pd = NULL;
从这里我们可以清楚地看到,指针定义的方式是:type+*
- #include <stdio.h>
- //演示实例
- int main()
- {
- int n = 10;
- char *pc = (char*)&n;
- int *pi = &n;
-
- printf("%p\n", &n);
- printf("%p\n", pc);
- printf("%p\n", pc+1);
- printf("%p\n", pi);
- printf("%p\n", pi+1);
- return 0;
- }
当我们运行这段代码
我们发现把n的地址给了char指针变量pc,int类型指针变量pi,它们三个的地址打印出来果然一样, 但是当分别对pc和pi+1,也就是向前走一步时,char类型指针变量pc的地址由000000C56993FA04变成了000000C56993FA05,由于它是char类型,char类型的变量默认占一个字节,这里系统默认pc指向的是一个char类型的变量,所以向前走了一个字节,而int类型指针变量pi地址由000000C56993FA04变成了000000C56993FA08,由于它是int类型的指针,所以系统默认它指向的是一个int类型的变量,所以当它+1,也就是向前走一步时,向前走了4个字节。
&为取地址符,*为解引用符,它们是天生的一对,&是对变量的地址操作,*是对变量的值操作
可以看到,当我们输出*pa时,编译器输出了它指向的那个变量的值,而输出&pa,
编译器输出了pa的所在的地址。
我们这一期的指针就到此结束啦, 我们下期不见不散,未完待续。。。。。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。