黑马程序员技术交流社区

标题: C语言--指针 [打印本页]

作者: Jack-xie    时间: 2014-10-17 09:14
标题: C语言--指针
一、 指针的重要性
指针可以直接修改内存中的值,有了指针,还有说明做不了的呢?
指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学的很好,那你干脆说没学过C语言。


二、 指针的定义与赋值
       格式:变量类型 * 变量名
1、 先定义后赋值:
int a = 10;
int *p;
p = &a;
2、 定义的同时赋值:
int a = 10;
int *p = &a;
注意:int *p;   p = 10;  //p指向的地址是10
int *p;   *p = 100;  //p指向的地址里面的数据是100
int *p;   *p = &a;  //p指向的地址里面的数据是a的地址
%p输出指针里面存储的地址值。
不能乱用,比如:int a = 10;    float *p = &a;
指针的唯一作用:存储地址,访问对应的存储空间:取值或复值。

三、 指针变量所占用的存储空间
不管指针指向什么类型的数据,它存储的都是内存地址。所以所有的指针变量所占的空间都是一样的,与指针变量的类型无关,只跟编译器有关。在Xcode中,指针变量占8个字节(因为内存地址都是很大的数字)。

四、 为何指针变量要分类型
1、指针可以用于指向任何类型的变量(数组、结构体、其他指针等),这就需要定义不同类型的指针。如果指针没有指向相应类型的变量,那么运算结果就很有可能是错的。
2、在数组中经常会使用*(p+i)这种形式,指针可以和数字相加,指针的类型决定了当指针+1时跳过多少个字节。当为int类型时,就会跳过四个字节;当为char类型时,就会跳过一个字节。

五、 为什么要使用指针
1、 在函数调用时使用指针,可以让形参复制实参的地址,从而在函数内部修改外部变量的值。
2、 指针可以让函数返回多个值。

六、 指针与函数
1、 数组元素的访问方式
1> ages[i]  //数组名[下标]
2> p[i]   //指针变量名[下标]
3> *(p + i)  //指针加上一个数值
2、 数组指针和函数参数
      1)用函数操作一个数组,可以使用数组作为函数参数,也可以使用数组指针作为函数参数。调用时,实参都是数组名,因为数组名就是数组首元素的地址。
注意:两种方式中函数参数的本质都是一个指针,所以如果在函数内部使用sizeof(数组名),获得的总是8个字节(即指针的大小),而不是整个数组所占的字节数。

七、 指针与字符串
1、 字符串的定义
1> 利用数组   char name[ ] = "itcast";
特点:这样定义的字符串其实是一个变量字符串,里面的字符是可以修改的。
2> 利用指针   char *name = "itcast";
特点:这样定义的字符串其实是一个常量字符串,里面的字符是不能修改的。
2、 字符指针数组
定义一个字符指针数组:
char *name[2] = {"jack","rose"};
其实用字符串数组也可实现上面的存储:
char name[2][10] = {"jack","rose"};

八、 返回指针的函数
指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的。
返回指针的函数的一般形式为:类型名 * 函数名(参数列表)。

九、 指向函数的指针
1、 为什么指针可以指向一个函数
函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。
2、 指向函数的指针的定义
定义的一般形式:函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);
3、 使用注意:
1> 由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的
2> 指向函数的指针变量主要有两个用途:调用函数,将函数作为参数在函数间传递。

作者: 杨鸿    时间: 2015-7-28 09:09
支持一下!
作者: 夏末未至    时间: 2015-7-28 09:56
总结的不错啊
作者: 魏武    时间: 2015-7-30 15:16
总结的很好 ,看了之后豁然开朗
作者: Nova    时间: 2015-7-30 20:55
不错,赞一个
作者: 青葱岁月@1    时间: 2015-7-30 22:48
支持一下
作者: heyuze    时间: 2015-8-20 08:49
很不错啊~
作者: Vigor    时间: 2015-8-29 21:38
整理的蛮不错!
作者: LucienER    时间: 2015-8-30 09:58
很精辟啊,要是带个例程就更好了
作者: FTD    时间: 2015-10-5 10:27
明天我就要学习指针了,看看你这个,帮助挺大的!感谢
作者: 田智广    时间: 2015-10-5 11:18
技术贴,顶起!!
作者: 安徒生童话13    时间: 2015-10-5 16:32
技术贴,真的很棒,保存了!学习学习
作者: QQ15862772896    时间: 2015-11-21 00:23
总结的真全,楼主一顶是大神
作者: 东方IOS    时间: 2015-11-21 12:55
谢谢老师,拜读下
作者: Windnon    时间: 2015-11-21 17:40
学习了~~~~~~~~
作者: fengcommon    时间: 2015-11-22 18:24
刚好在看指针部分,好东西
作者: konglong    时间: 2015-11-29 14:41
很好,挺不错的
作者: flyflyfly    时间: 2015-11-29 15:07
顶一个!
作者: Duang__    时间: 2015-11-29 22:05
大赞,期待LZ继续发表其他知识点
作者: zf147    时间: 2015-12-13 20:16
写的很好,我还在学,一起努力,哈哈哈哈
作者: 罗宁    时间: 2015-12-14 00:06

总结的很好 ,看了之后豁然开朗
作者: zll464928406    时间: 2015-12-15 08:51
表示指针不好学
作者: zfl920817    时间: 2015-12-15 22:00
我刚学,总结的不错,赞一个
作者: 老男孩let    时间: 2015-12-16 18:10
不错不错
作者: 余超324    时间: 2015-12-17 11:38
不错不错,值得学习一下。
作者: w83144378    时间: 2015-12-17 13:37
可以的  写的不错
作者: heck    时间: 2016-4-6 00:35
专业水贴,请求给水经验,
作者: 15527933998    时间: 2016-4-7 20:53
基本都是耶
作者: liugonglian    时间: 2016-4-23 20:21
有用....................................
作者: 小破孩lover    时间: 2016-4-23 23:32
指针部分确实不容易啊!!!
作者: 我说三年    时间: 2016-4-25 22:21
嗨起来{:3_46:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2