对于成功的使用C程序设计语言而言,正确的理解并使用指针是十分重要的,我在学习数据结构的时,体会的更加深入,有必要对几种常见指针使用方法作一下小结。
什么是指针?指针可以看作是存放内存地址的变量,如果一个变量含有另一个变量的地址,则称第一个变量Point to 第二个变量,指针又两个操作符&和*,&是一元操作符,只作用于一个操作数,他返回操作数的地址,可以认为&的意义是“求地址”。*也是一元操作符,可以看作&的补操作。返回其操作数所指变量的值。int * p这是就基本的也是最一般的表示方法,解释成为,基类型+* +指针变量名,应该注意的是基类型应该与p所指向变量的类型是一致的,这里谈到了类型,一般类型的指针可以转化成另一种类型,这里需要注意的是void * 型的指针可以赋给其他任何类型的指针,void *型指针一般称为普通指针,它是常用来说明基类型未知的指针。void *类型允许函数指定参数,这个参数可以接受任何类型的指针变元而不必报告类型失配。它转换成其它类型的指针不需要明确的强制类型的转换。这里需要指出的是指针操作说指针类型而不是他所指向的对象类型的支配。举个例子 double x=100.1,y; int *p; p=(int *)&x; y=*p;
这里使用了强制的类型转换,这种转换是正确的,但是不用按预期的结果去执行,因为int是4个字节,duoble是8个字节因为p被声明为整形指针。所以只有4个字节的信息通过此赋值语句化为y。可以施加指针的算术操作只有+,-。他是以基类型为一个单位的。所以指针++以后是指向下一个整数,并且可能与前一个整数地址在内存地址上并不连续。p=p+12时表示p指向当前位置后的第12个元素。我们还可以从指针中减去另一个指针,除此之外都是违法的。指针还可以进行比较,如if(p>q).一般来判定是否指向一个对象。
指针和数组两者极为密切。char str[80],*p; p=str;这里p置成数组str的首元素。所以第5个元素是str[5]或*(p+4)一般来说后者比使用下标要快。
指针数组,如 int * x[10];它表明这个数组每个元素都是一个基类型为整形的指针变量。如果作为参数进行传递,可以写成void name(int * x[]){...}  指针数组常用来放置指向串的指针。如static char * err[]={"第一个字符串";“第二个字符串”}可以以表的形式呈现出来而指针数组的每个值都是每行的首地址;
多级间地址,也就是指向指针的指针,至于几级并没有限制,但一般很少见二级以上。普通指针是含预期值变量的地址,在指针对指针时,第一个指针含第二个指针的地址,第二个指针再指向含预期值的变量,int x,*p;**q; x=10;p=&x;q=&p;
结果 *p与**q的值是一样的都是10。
函数指针 int (*p)(const char *,const char *);他是作为函数的句柄指向函数的首地址,可以赋值p=strcmp。他也可以作为另一个函数的参数来传递,*p外的括号是必不可少的。
下面来看一下这个式子,p=(int (*)[10])malloc(40*sizeof(int));这可以分解成int (*p)[10]; p=malloc(40*sizeof(int));这两部分来说明,p是一个指向含10个整数数组的指针,但它的基类型是10-int数组,当p增量时,他指向后10个整数的开头。它通常用来表示一个以线性结构来存储的表的结构,并且这表的行是由malloc动态分布的,也就用指针实现了动态数组。
有新想法的匆匆过客可以留言补充。以上只是对一些常用的加以分类,Good Luck.

转载于:https://www.cnblogs.com/baoyu/archive/2005/08/21/219650.html

有关C语言指针学习思想的随笔常用形式的总结(原创)相关推荐

  1. C语言指针学习与使用

    C语言指针学习与使用 计算机存储 想要更好的使用指针,需要对计算机的存储有一定的概念和了解.下面的图片中展示了计算机的硬件结构: 存储设备除了上述的主存储器外,还有其他的一些在执行程序时可能会用到的存 ...

  2. C语言再学习 -- 结构和其他数据形式

    一.结构体 结构体可以用来创建新的数据类型,这种数据类型可以把多个其他类型合并成一个整体,采用结构体声明的变量叫做结构变量,结构体需要先声明然后才能使用,声明结构体需要使用struct关键字,结构体声 ...

  3. C语言指针学习(1)

    1.学习指针,我们得先了解指针是什么? 指针其实就类似一个地址,我们使用的编译系统会根据程序划分一定的空间来存储变量,而通过一个地址,我们就可以找到那个空间,找到我们想要的变量,通过地址就可以找到所需 ...

  4. C C++语言指针学习!(基础篇!) 指针的掌握真滴是分水岭呦~

    指针就是其值为内存单元地址的变量! 一个指针包含的则是一个变量的地址! 每一个指针变量名字前面都必须有一个:*符号作为前缀! 指针运算符: #include<iostream> using ...

  5. C语言指针学习(续)

    五.数组和指针的关系 int array[10] = {0,1,2,3,4,5,6,7,8,9},value; ... ... value = array[0];//也可以写成 value = *ar ...

  6. C语言指针学习 小泉的难题

    小泉的难题 Description 机械实验班有个同学叫小泉,有一天数学老师给小泉布置了一道个人作业,给小泉M(M<=100)组数据,每组数据有N个正整数(N<=100)让他把每组的N个数 ...

  7. C语言指针学习(6)指针数组-字符指针数组

    ** 一.指针数组(比较常见) ** 2.指针数组定义:数组中每个元素都是一个指针(地址) 每个元素只能是地址,不能是普通数据 3.定义指针数组的语法: 数据类型 *数组名[数组长度/元素个数]={地 ...

  8. C语言指针学习中易犯的错误

    1.向null地址处copy数据 char *str = NULL; strcpy(str,"aaaaabbbbb"); 错误! NULL是操作系统保护的空间,不能往里面拷贝数据: ...

  9. 每个c语言程序写完后 都要按照,c语言基础学习小结(习题总结)(5页)-原创力文档...

    书山有路勤为径 学海无涯苦作舟 一.思考题. 1.你如何向别人解释清楚什么是编程.什么是计算机语言? 2.什么是C语言? 二.解答题. 1.用C语言编写程序:求任意两个整数的和.如果是小数的话,要求输 ...

最新文章

  1. 蚁群用户界面:一群桌面运动的机器人
  2. 通过java查询数据库表结构
  3. Python-OpenCV-- 台式机外接摄像头EAST文本检测+OCR识别
  4. 三角形带优化库nvtrisrip的使用
  5. 国网“泛在电力物联网”的战略与逻辑
  6. MEF初体验之六:导出和元素据
  7. python+tkinter出现错误
  8. 光纤跳线接口_一文了解光纤配线架、光纤跳线、耦合器、收发器及光纤色谱顺序...
  9. Java程序员面试常见问题
  10. 自己仿的一个网页,比较适合小白入门
  11. EXCEL电子档色环电阻计算器
  12. 单位根检验urdf_怎样分析单位根检验结果
  13. 2017计算机二级ms office高级应用成绩查询
  14. 启明星辰潘柱廷:信息安全市场的战国春秋与陆地海洋观
  15. 计算机编程领域最伟大的20个发明
  16. SECS/GEM/GEM300/EAP 讲解(三)半导体协议
  17. Batch Normalization算法
  18. 【高数】高数平面立体几何
  19. 问渠那得清如许?为有源头活水来。——java面向对象的思想
  20. 基于PaddleDetection-YOLOV3做一个完整的图形目标检测项目

热门文章

  1. 华为201万年薪招毕业生!来自这些高校
  2. 知乎热议!一个博士生接受怎样的训练是完整的科研训练?
  3. 英伟达A100可达V100的3.5倍?
  4. 建神经网络模型,哪种优化算法更好?35000次测试告诉你丨图宾根大学出品
  5. 【AI思辨】八年之痒!除了NLP和CV,人工智能就不能干点别的啥了?
  6. 化栈为队(两个栈来实现一个队列)
  7. Redis键命令(查找键、判断键值是否存在、查看键值类型、删除键值、设置过期时间、查看键值有效时间)
  8. 彩色图像到灰度转换 常见方法汇总与对比
  9. 绝对不容错过:最完整的检测模型评估指标mAP计算指南(附代码)在这里!
  10. OpenCV4 部署DeepLabv3+模型