四---指针
来源:互联网 发布:linux怎么支持中文目录 编辑:程序博客网 时间:2024/04/30 01:27
1,指针
李明杰老师说过:“如果一个人说他c语言除了指针其它都学习的很好,那么可以说这个人没学过c语言。”可见指针在c语言中的重要性和复杂程度。和很多人一样,刚接触指针时我也感觉很晕摸不着头脑,但随着后面的学习和练习,天天面对指针使用指针,渐渐的对指针的认识会越来越熟悉。
指针和其他变量一样,在内存中占据一小块存储空间,如果说一个int类型变量的存储空间里肯定存储整数,一个double类型变量的存储空间中肯定存储小数,那么指针中存储的只有地址值。
数据在内存中存储着,为了能找导数操作数据,每个数据都有自己的地址值,拿到了地址就能按照地址对数据进行访问和操作,地址通常是16进制格式,比如:0xffc7什么的。每个指针变量中就存储着一个地址值,任何指针都占据8个字节存储空间,我理解为指针变量里存放的就是一个长整型数据。
指针的书写格式:
变量类型 *变量名;
其中变量类型可以使任何有效的变量类型比如:int , float , bool等,也可是某个对象的类型名例如:Person *p;。*符号没有实际意义,只是一个标示,表示*后面的变量是一个指针,它指向的是*前面的一个变量类型,指针里面只存储指向变量的地址值。
例如:
int a = 10;
int *p = &a;
则就成为指针p指向了变量a。
此时访问a的话就能得到值10,访问p的话则会的到a的地址值,访问*p的话就会直接找向内存中的a。
2,数组与指针
用指针指向一个数组时指针会指向数组的首个元素,数组的元素在内存中所在地址是依次递增的,例如:
int num[5] = {5, 13, 9, 37, 66};
int *p;
p = &num[0];
假设num这个数组的零角标元素5在内存中的地址值是0xffc3,那么2号角标元素13在内存的地址就是0xffc7,一个int类型数据占据4个字节空间,数组内的元素在0xffc3基础上一次递增,把零角标元素的地址传递给p,p就指向了数组num,这和:p = age;的效果是一样的。
此时访问数组成员除了用数组名加角标号:num[2], num[3]之外还可以用指针访问:*(p+2),*(p+3),或者直接p[2],p[3]。因为p+1就相当于在p存储的地址上加上4,此时地址会直接指向1角标元素的地址,同理*(p+2)就直接访问了角标2元素。
指针加1具体会给地址值加多少字节地址取决于指针类型:
int * 加4
char * 加1
double* 加8
可见加多少与指针类型的数据在内存中占用多少空间是一样的。
3,指针与字符串
用指针指向一个字符串时也是会把字符串的首个元素地址传给指针,但指针指向的字符串是不可改的,例如:
char name[] = ”haha”;
name[0] = H;
这是常规定义字符串的方法,用名称和中括号表示字符串变量,用双引号传入字符串初始化,可以用字符串名称加中括号元素角标的方法改变字符串的具体值。
char *name = ”haha”;
用指针定义的字符串是不能执行上见面类似改变字符的操作的,这个字符串其实是一个常量字符串,用指针定义的字符串存储在内存的常量区中。
如果定义一个字符串需要经常改动就利用数组创建,如果定义的字符串不需要修改而且经常使用,就用指针创建。
4,指向函数的指针
指针也可以指向函数,指向函数的指针格式为:
函数的返回值类型 (*指针名)(函数的形参数量和类型);
#include <stdio.h>
int sum (int a, int b)
{
return a+b;
}
int main()
{
int (*p)(int, int);
p = sum;
int c = p(5, 6);
printf(”c = %d”, c);
return 0;
}
int (*p)(int, int);其中(*p)是固定写法,左边的int代表指针将来指向的函数的返回值是int,右边的两个int带表指向函数有两个int类型的形参。用p = sum;指向sum函数后就可以用指针名来调用函数了。
指针可以指向一切在内存中占据存储空间对象和变量甚至函数,熟练的运用指针是对开发者的基本要求,只要分清指针存储的值,指针本身的地址值,指针指向对象的地址值,指针指向变量的值不要混淆就能掌握指针。
- 四---指针
- C和指针 四
- 指针学习(四)
- 指针入门(四)
- 内存 变量 指针(四)
- 四、数组和指针
- 深入理解 C++ 指针(四)---指针表达式
- 四、C++ 数组指针 与 指针数组
- 四.函数指针和指针函数
- 四.class,selector,函数指针
- 【C解析之四】指针
- 《c和指针》(四)
- 【C解析之四】指针
- 【C解析之四】指针
- c语言指针(四)
- C指针基础(四)
- C++实训 单元四 指针
- 指针的四种用法
- 学徒浅析Android开发:第八讲——TabWidget标签制作
- poj-3041
- 开启mysql远程连接
- sql1
- 稻壳首页index.php添加站点名和搜索代码
- 四---指针
- PHP将pdf文件转换成swf文件
- (原创)儿时四子棋程序(初步版)
- 8 Reasons why SharePoint is Bad for Your Business 8个理由告诉你,为什么SharePoint对你的业务有害
- 五---面向对象和类
- Spring事务管理只对出现运行期异常进行回滚
- 稻壳CMS如何替换栏目标题
- qt 事件机制(事件分发、posted、send)
- 根据IP得到所在城市