文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言指针使用实例分析

2023-07-02 07:51

关注

今天小编给大家分享一下C语言指针使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

何为指针

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

C语言指针使用实例分析

(编辑器为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();}

C语言指针使用实例分析

我们发现当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();}

C语言指针使用实例分析

现在我们发现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();}

C语言指针使用实例分析

二级指针

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

C语言指针使用实例分析

函数指针

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);}

C语言指针使用实例分析

指针函数

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

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语言指针使用实例分析

文件指针

这个就有意思了,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语言指针使用实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯