一.指针是什么?

–指针一直是C语言学习过程中的一座大山,今天趁冬至谈一谈对指针的理解
1.指针在计算机中,是编程语言的一个对象,利用地址,它的值直接指向存在电脑存储器中的另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化称为“指针”,即通过它找到以它为地址的内存单元。以上是官方解释,但我觉得过于抽象。
2.通俗说,指针就像宿舍楼里每个宿舍的门牌号,宿舍就是存储单元,住在宿舍里的学生就是存储的数据元素,通过宿舍门牌号才能快速并精准的定位到某某数据的位置,所以指针的优点就是帮助我们提高了查找内存位置的效率
3.那么指针到底是什么
指针就是个变量,存放内存单元的地址

int main()
{int a=10;//在内存中开辟一块空间
int *p=&a;//这里我们对变量a,取出它的地址,然后将a的地址存放在p变量中
return 0;
}

4.指针是用来存放地址的,地址是唯一标示一块地址空间的,并且指针的大小在32位平台是4个字节,在64位平台是8个字节

二.指针的类型

1.字符指针char*)

int main()
{char ch ='w';
char *pc = &ch;
*pc ='w';//指针解应用,所指向的目标就是ch
return 0;
}

2.指针数组/数组指针(存放指针的数组)

int* arr1[10];//整形指针的数组
char* arr2[4];//一级字符指针的数组
char** arr3[5];//二级字符指针的数组

①数组指针

int (*p2)[10]
p先和 * 结合,说明 p是一个指针变量,然后指针指向的是一个大小为10个的数组,所以p是一个指针,指向一个数组,叫数组指针
因为 [ ] 的优先级要高于 * ,所以必须加上()来保证 p 先和 * 结合

②&arr与arr的区别

arr表示数组名,代表的是数组首元素地址
&arr 表示的是数组的地址
arr = &arr[0]
注意:
a.数组名在sizeof中单独出现代表整个数组
b.数组名取地址代表整个数组
c.其他情况,数组名都代表首元素的地址

③arr+1与&arr+1的区别

arr + 1 下一个元素
&arr + 1下一个数组
数组的+1,跳过整个数组的大小

3.二级指针

int a=10; a 10 0x0018ff44
int *pa=&a pa 0x0018ff44 0x0018ff40
int **ppa=&pa ppa 0x0018ff40 0x0018ff3c

a的地址放在pa中,pa的地址存放在ppa中,pa是一级指针,而ppa是二级指针

三.指针与函数

1.指针作为函数参数
①一级指针传参

#include <stdio.h>
void print(int *p, int sz) {int i = 0;for(i=0; i<sz; i++){printf("%d\n", *(p+i));}
}
int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9};int *p = arr;int sz = sizeof(arr)/sizeof(arr[0]);//一级指针p,传给函数print(p, sz);return 0; }

②二级指针传参

#include<stdio.h>
void test(int **ptr)
{printf("num=%d\n",**ptr);
}
int main()
{int n=10;
int *p=&n;
int **p=&p;
test(pp);
test(&p);
return 0;
}

总结:①:函数形参为指针变量,用指针变量作为实参
②函数形参为指针变量,用变量地址作为实参

2.指向函数的指针
变量与特定的单元相联系,通过变量名可以得到变量的存储地址。
一个函数包括一组指令序列,存储某一段内存中,这段内存空间的起始地址称为函数的入口地址,通过函数名可以得到这一地址。相反,也可以通过该地址找到这个函数,,所以函数的入口地址为函数的指针。

定义形式为:
类型标识符(* 指针变量名)();
eg:int( *p)(); float( *q)();
表示p指向一个返回整型值的函数,q指向一个返回浮点型值的函数

int( * p)();与int *p();的区别> 前者定义的是p为一个指针变量(指向函数)
> 后者定义p是一个函数,其返回值为指针

后续有对指针新的理解还会更新。

对C语言指针的学习与理解相关推荐

  1. c语言指针心得6,c语言指针的学习心得

    #include main() { view *有求于人: if(真的做不到) { point  *怎么办? 怎么办?=&可以去找比自己犀利的人寻求: } else(做的到&& ...

  2. c语言指针章总结,c语言指针的学习心得

    #include main() { view *有求于人: if(真的做不到) { point  *怎么办? 怎么办?=&可以去找比自己犀利的人寻求: } else(做的到&& ...

  3. c语言学指针变量,C语言指针变量学习五

    //下面的程序演示了指针没有被人为手动分配存储空间的错误 #include int main() { int * p; int i = 5; *p = i; printf("*p=%d\n& ...

  4. C语言指针 动画展示 指针到底是什么 指针的本质 C语音深入剖析

    是不是一直搞不懂C语言的指针,看完这个动画,你就全明白了 是不是一直搞不懂C语言的指针,看完这个动画,你就全明白了_哔哩哔哩_bilibili [指针的秘密]这可能是最好懂的C语言指针讲解?! [指针 ...

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

    对于成功的使用C程序设计语言而言,正确的理解并使用指针是十分重要的,我在学习数据结构的时,体会的更加深入,有必要对几种常见指针使用方法作一下小结. 什么是指针?指针可以看作是存放内存地址的变量,如果一 ...

  6. 64位程序怎么判断指针是否有效_C 语言指针怎么理解?

    注: 看完这篇一定会让你理解透彻指针的本质 是的,这一篇的文章主题是「指针与内存模型」 说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解. 不了解的对指针的理 ...

  7. 《C++应用程序性能优化::第二章C++语言特性的性能分析》学习和理解

    <C++应用程序性能优化::第二章C++语言特性的性能分析>学习和理解 说明:<C++应用程序性能优化> 作者:冯宏华等 2007年版.最近出了新版,看了目录,在前面增加了一章 ...

  8. 最热网友收藏:深入理解C语言指针的奥秘((2007年第3周)

    2007年第3周最热网友收藏 深入理解C语言指针的奥秘(93),共121人收藏,yanglilibaobao首先收藏 我来做个好人吧,40种网站设计常用技巧(78),共440人收藏,wuzeng200 ...

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

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

  10. C语言重点——指针篇(一文让你完全搞懂指针)| 从内存理解指针 | 指针完全解析

    有干货.更有故事,微信搜索[编程指北]关注这个不一样的程序员,等你来撩~ 注:这篇文章好好看完一定会让你掌握好指针的本质 C语言最核心的知识就是指针,所以,这一篇的文章主题是「指针与内存模型」 说到指 ...

最新文章

  1. gulp-load-task 解决 gulpfile.js 过大的问题
  2. android 字幕,Android中的字幕文本
  3. Linux下进程通信知识点学习笔记(一)
  4. 华人“军火专家”——黄仁勋 1
  5. boost::movelib::default_delete相关用法的测试程序
  6. Fis3的前端工程化之路[三大特性篇之资源定位]
  7. 数据中心实施服务器虚拟化前的十大思考
  8. Spring IoC反转控制的快速入门
  9. OSSIM5 自定义安装
  10. PropertyGrid仿VS的属性事件窗口
  11. Java游戏编程——愤怒的小鸟(一)
  12. matlab潮流计算仿真,基于MATLAB的几种潮流计算
  13. QT实现植物大战僵尸中文版工具代码
  14. 用户增长——AARRR模型
  15. 【EfficientNet】EfficientNet网络结构及代码详解
  16. 对random.seed()的理解
  17. Ever-Flowers IN Never-Dream(19)
  18. 麦肯锡七步法——《金字塔原理》
  19. 十款经典php网店系统
  20. IEEE SPL文章接收后通讯作者注册IEEE账户并验证文章

热门文章

  1. 5G简介【华为ICT学堂】笔记
  2. Windows实现微信多开+美化图标
  3. Python爬虫之JS逆向分析技巧
  4. SystemConfiguration 简介
  5. 计算机思维和数学的那些事
  6. 《数字图像处理 第三版》(冈萨雷斯)——第四章 频率域处理
  7. NetBEUI协议巧安装
  8. 学习OpenCV研究报告指出系列(二)源代码被编译并配有实例project
  9. Linux 服务器上安装 ANSYS Fluent 2020R2
  10. tomcat编码配置gbk_tomcat编码乱码问题