目录

  • 何为指针
  • 数组指针
  • 指针数组
  • 字符串数组
  • 数组指针的sao气操作
  • 二级指针
  • 函数指针
  • 指针函数
  • 文件指针

何为指针

指针这玩意说白了,就是用来存储一个变量地址的东东
如图:

(编辑器为vc2010)

#include<stdio.h>
void main(){int a,*p;a=5;p=&a;printf("a=%d,p=%p,*p=",a,p,*p);getchar();}

所以通过刚刚的情况,我们发现通过指针我们不仅可以获取一个变量的值还可以直接对变量的值修改

又如下面的例子:

#include<stdio.h>
void main(){int a=3;int* prt;prt=&a;printf("a的值为%d\na的地址为%p\nprt存放的值为%p\nprt的内存地址为%p\nprt所存的地址对应的值为%d",a,&a,prt,&prt,*prt);getchar();}

数组指针

说到指针只说基本的int char float有什么意思,接下来是一个数组指针
将数组和指针结合起来.当然数组本身在传递的时候就是以指针传递的.
下面是以段代码演示

#include<stdio.h>
void main(){int a [5]={1,2,3,4,5},*p,i;p = a;for(i=0;i<5;i++){printf("&a[%d]=%p,a[%d]=%d\n",i,p,i,p[i]);}getchar();}

我们发现当p=a(指针指向数组a)后,指针p可以和数组a一样操作,这就是指针数组.

指针数组

既然说到了指针数组那么就不得不说数组指针,乍一看这两个名字很像,其实差距还是很大的.
int *p[]
下面还是以上面的例子为例,我们让输出结果一致

#include<stdio.h>
void main(){int a [5]={1,2,3,4,5},*p[5],i;for(i=0;i<5;i++){p[i]=&a[i];}for(i=0;i<5;i++){printf("&a[%d]=%p,a[%d]=%d\n",i,p[i],i,*p[i]);}getchar();}

我们发现,这个东东其实就是一个存储地址的数组,这个内存地址既可以是int char 或者float 同时也可以是数组,这个我们在说完字符串数组后再说.

字符串数组

C语言里面没有string类(java)也没有str(python)只有字符,所以我们引入了字符串数组,用来存储字符串.
(‘a’ 一个字节 "a"两个字节)
这里要注意一下的是,一个字符串数组如 char a[5]=“hello”,表面上看这里只有五个字符,但是其实在他们的内存分布里面最后面结尾(‘o’后面)还有一个字符’\0’表示结束,所以只用char a[5]放不下hello,char a[6]=“hello"才行.所以"a” 是’a’+’\0’两个字节(’\0’不显示)

#include<stdio.h>
void main()
{char a[6]={'h','e','l','l','o'};//char a[6] ="hello";也行printf("%s",a);getchar();
}

此外还要注意一点直接写一个"hello"也是一个字符串数组只不过未命名罢了,我们可以用指针访问

#include<stdio.h>
void main()
{char *p="hello";printf("%s\n",p); //%s 会读取第一个字符的地址知道读到'\0'printf("%c",p[1]);//输出字母egetchar();
}

数组指针的sao气操作

先看一段代码

#include<stdio.h>
void main(){char *p[3]={"hello","my","friend"};printf("%s",p[1]);getchar();}


现在我们发现p[1]可以和一个字符指针一样操作,也就是说
p[1]等价于

char a[4]=“my”,*c;
c=a;
这里的c就等价于p[1]

#include<stdio.h>
void main(){char *p[3]={"hello","my","friend"};int i;for(i=0;i<2;i++){printf("%c\n",p[1][i]);}getchar();
}

二级指针

这个家伙,就是套娃,看一张图就明白了

函数指针

int (*p)( int x)
int 指向的函数类型
(*p)指针名字
(int x) 所指向的函数所需要输入的参数

这个呢就是一个函数
举个例子

#include<stdio.h>void main(){int go(int x);int x,(*p)(int x);scanf("%d",&x);p=go;//指针指向函数//(*p)(x)也行p(x);getchar();getchar();}int go(int x)
{printf("you input number is:%d",x);}

这玩意的好处是啥呢, 有了这玩意,我可以直接向一个函数里面传递另一个函数
举例升级

#include<stdio.h>void main(){int go(int x),x;void show(int x, int(*p)(int x));scanf("%d",&x);show(x,go);getchar();getchar();}int go(int x)
{printf("you input number is:%d",x);}
void show(int x, int(*p)(int x)){printf("you have inputed!\n");p(x);}

指针函数

说白了这就是一个函数,返回了一个地址如:

int* go (int* x,int* y)

和函数指针长得像,原因在于* 得运算级别比()低所以函数指针加了()
举个例子

#include<stdio.h>void main(){int *go(int *x);int a=5,*p;p=go(&a);printf("a的地址为:%p,值为:%d",p,*p);getchar();}int *go(int *x){printf("地址以获取\n");return x;
}

文件指针

这个就有意思了,C语言把所有的设备都视为指针.
FILE *fp=NULL;
fp = fopen(“文件路径”,“w”) (“w"是打开模式,w写)
fprintf(fb,”%s",str) 这玩意和print的用法是一样的只不过前面指明了指针
换句话说
printf("hello) 与 fprintf(stdout,“hello”)一样,stdout屏幕指针,stdin键盘指针
同理
fputs(“hello”,fp)

接下来是读文件
char s[100]
fp = fopen(“文件路径”,“r”)
fscanf(fp,"%s",s)
fgets(s,100,fp) (100是最大长度)
区别是什么呢,fprintf()读到空格或回车就返回,fgets()读到回车返回
此外还要fread()
fread(接收数据的地址,读取多少字节的内容,数据项个数,文件指针)
其他的查手册就好
最后别忘了关闭
fclose(fp)

C语言指针(分分钟玩转)相关推荐

  1. 导航编程用c语言还是c加加,C语言/C加加大神程序员老司机带你玩转C语言指针详解...

    很多初学编程的小伙伴都会选择C语言作为第一门学习的编程语言,因为C语言作为一门底层基础语言相对于其他的高层语言来说更加容易学习.可以来帮助正在学习编程的小伙伴更加快速的了解计算机原理. 但是初学C语言 ...

  2. 学习C语言指针,这一篇案例教程就够够的了

    指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明. 一个优秀的程序员最爱玩的就是指针! 通过本文10个案例的学 ...

  3. c语言指针官方解释_C语言中的指针解释了–它们并不像您想象的那么难

    c语言指针官方解释 Pointers are arguably the most difficult feature of C to understand. But, they are one of ...

  4. 手把手入门C语言—C语言指针

    手把手入门C语言-C语言指针 指针前言 什么是指针? 指针的长度 指针的深入理解 四个小实验 int i = 123;int* p; p = &i; 理解指针 1.指针和指针变量的关系 2.为 ...

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

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

  6. C语言教程,30分钟彻底学会C语言指针视频教程

    c语言教程视频讲座简介: 沉睡者IT:C语言教程,30分钟彻底学会C语言指针视频教程 培训课程内容介绍: 此课程是针对C.C++指针的专题课程,通过对指针本质的讲解,帮助学员对指针快速的理解,并讲结合 ...

  7. c语言获取指针分配的字节数,c语言指针知识点总结(共6篇).docx

    c语言指针知识点总结(共6篇) C语言指针教学中的知识点分析与总结 摘要:分析指针的基本概念及指针在数组.函数.字符串.动态存储分配等方面的应用,提出指针教学过程中易混淆概念及注意事项,对初学者深入理 ...

  8. C语言指针数组与数组指针的区别

    C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...

  9. simple c语言,C语言——指针(simple).ppt

    C语言--指针(simple) 莆田学院计算机教研室 2003年5月 指 针 绍兴文理学院自动化教研室 2011年4月 本讲主要内容 指针概述 地址· 指针· 指针变量 指针变量作为函数参数 指针与数 ...

最新文章

  1. Redis专题-持久化方式
  2. 【MM模块】Cycle Counting 周期盘点
  3. 我们在tool里给ui element设置断点,然后操作的时候,断点就触发了。Framework是咋实现的
  4. [深度学习] 自然语言处理 --- 基于Attention机制的Bi-LSTM文本分类
  5. php gridview,PHP编程:yii2-GridView在开发中常用的功能及技巧总结
  6. win8系统如何开服务器,Win8.1怎么打开IIS服务器?Win8.1专业版64位系统中打开IIS服务器的方法...
  7. 随想录(学校研究和公司研发)
  8. 深度学习 tensorflow 计算图,会话,张量
  9. Docker使用Dockerfile创建Centos(tomcat+jdk)镜像
  10. 日子计算(结构+函数)
  11. 网络1711-12信管1711-12 图 作业评分
  12. python 读取网络位置的文件
  13. python爬取网页数据总结_python之爬取网页数据总结(一)
  14. 小鸟云服务器怎么进行启动和关机?
  15. keep-alive用法
  16. Pixelmator Pro Mac(图像编辑软件)
  17. react项目中使用阿里播放器播放视频,包括切换视频,播放定时跳转(兼容ios和andro),播放完成
  18. 单片机红外通信c语言,用51单片机实现红外通讯源码
  19. 酒店点餐系统开发详解(一)
  20. 【100个 Unity实用技能】| Unity将本地图片文件显示到Image组件中 通用方法整理

热门文章

  1. 【开启全民开发时代】无代码RPA 赋予业务人员IT能力,简单易学的工具化软件
  2. c语言八进制转二进制
  3. 设置阴影box-shadow与text-shadow
  4. 使用python中pydub批量去除mp3中的静音段
  5. ao史密斯定时设置_史密斯热水器定时是设定几小时后加热吗
  6. SolidWorks六角形弹簧如何扫描做出来,实例讲解
  7. 【Python黑科技】下载保存QQ头像图片(保姆级图文+实现代码)
  8. 输入压缩空间量是分区量吗_如何安全、简便的对固态硬盘分区?
  9. jquery validate 校验
  10. 离职证明到底有什么作用?