四、指针

说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解。

不了解的对指针的理解就停留在“指针就是变量的地址”这句话,会比较害怕使用指针,特别是各种高级操作。

而了解内存模型的则可以把指针用得炉火纯青!

想学好C语言,很关键就是搞懂内存、指针、还有各种编译链接,

​​​​​​​

编程的本质其实就是操控数据,数据存放在内存中。

因此,如果能更好地理解内存的模型,以及 C 如何管理内存,就能对程序的工作原理洞若观火,从而使编程能力更上一层楼。

大家真的别认为这是空话,我大一整年都不敢用 C 写上千行的程序也很抗拒写 C。

因为一旦上千行,经常出现各种莫名其妙的内存错误,一不小心就发生了 coredump...... 而且还无从排查,分析不出原因。

相比之下,那时候最喜欢 Java,在 Java 里随便怎么写都不会发生类似的异常,顶多偶尔来个 NullPointerException,也是比较好排查的。

直到后来对内存和指针有了更加深刻的认识,才慢慢会用 C 写上千行的项目,也很少会再有内存问题了。(过于自信

「指针存储的是变量的内存地址」这句话应该任何讲 C 语言的书都会提到吧。

所以,要想彻底理解指针,首先要理解 C 语言中变量的存储本质,也就是内存。

1、给定一个字符串,求最后一个单词长度;

#include <stdio.h>
#include <string.h>
int lengthOfLastWord(const char *s)
{int a=0;while (*s!='\0'){if(*s==' ') a=0;else a++;s++;}return a;
}int main()
{char str[1024];gets(str);int length = lengthOfLastWord(str);printf("%d\n", length);return 0;

2、将两个字符串进行连接;

#include <stdio.h>
char strcat(char *str1,char *str2)
{int i=0,j=0;while(str1[i++]!='\0');i--;while(str2[j]!='\0'){str1[i++]=str2[j++];}str1[i]='\0';return 0;
}
int main()
{char str1[200];char str2[100];scanf("%s",str1);//put in NO.1scanf("%s",str2);//put in NO.2strcat(str1, str2);puts(str1);return 0;
}

3、调用reverse函数按输入时顺序输出

#include <stdio.h>
int reverse(int *a,int n)
{int i,j,t,temp; for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(*(a+i) < *(a+j)) {temp=*(a+i);*(a+i)=*(a+j);*(a+j)=temp;}}}for(i=0;i<n;i++){ printf("%d ",a[i]);} return 0;
}int main()
{ int a[20],n,*p=a;int i;scanf("%d", &n);for(i=0;i<n;i++)scanf("%d", a+i);//put in the a[i]p=a;reverse(p,n);return 0;
}

4、输入5个数据,调用move函数,使得其前面各数顺序向后移动3位;

#include <stdio.h>int main()
{int i,a[5]={0},b[5]={0};for(i=0;i<5;i++){scanf("%d ",&a[i]);}for(i=0;i<5;i++){ b[(3+i)%5]=a[i]; }for(i=0;i<5;i++){ printf("%d ",b[i]);}return 0;
}

5、让指针1指向最大值,2指向最小值,依次输出

 include <stdio.h>
int main ( )
{   int  a,b,c, *p1, *p2,max,min;scanf("%d%d%d",&a,&b,&c);min=a;if(b<min) {min=b;}if(c<min) {min=c;}max=a;if(b>max) {max=b;}if(c>max) {max=c;}p1=&max;p2=&min;printf("%d %d\n", *p1,*p2 );return 0;
}

初学者C语言练习题-指针相关推荐

  1. 初学者C语言练习题-入门

    一.入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级语 ...

  2. 初学者C语言练习题-结构体

    五.结构体 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{     结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多 ...

  3. 初学者对C语言中指针的爱恨情仇

    C语言中指针和数组的爱恨情仇 文章目录 C语言中指针和数组的爱恨情仇 一.前言 二.为什么学指针 三.说明 四.跟我一起学 (一)C语言中的*和& 1.C语言中为什么存在&和* 2.& ...

  4. C语言语句单选题,C语言练习题

    C语言练习题 C一个switch语句总是可以被一系列ifelse语句替换 D switch语句的测试表达式可以是任何类型 E当执行break语句时程序将停止执行 20在C语言中,在int num[5] ...

  5. 初学者c语言编程软件_C初学者手册:仅需几个小时即可学习C编程语言基础知识

    初学者c语言编程软件 This C Beginner's Handbook follows the 80/20 rule. You'll learn 80% of the C programming ...

  6. C语言练习题的错题集

    @C语言练习题错题集 判断题错题集 1.在对数组全部元素赋初值时,不可以省略行数,但能省略列数. 对于数组来说,列数是不可以省略的,相反的可以省略行数. 2.数组名就是一个指针常量,指向数组的首元素( ...

  7. c语言有三级指针,C语言 三级指针的应用

    //三级指针的使用 #define _CRT_SECURE_NO_WARNINGS #include #include #include //三级指针做输出 int getmun(char ***po ...

  8. c语言中用指针的必要性,浅析C语言使用指针的必要性.pdf

    第 21 卷第 8 期长春大学学报Vol 21No 8 2011 年 8 月 JOURNAL OF CHANGCHUN UNIVERSITYAug 2011 收稿日期 2011 06 20 作者简介 ...

  9. c语言中5l是数值或字符常量,C语言练习题-选择题(带答案)

    以下为<C语言练习题-选择题(带答案)>的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览.图片预览是什么样的,下载的文档就是什么样的. C语言练习题-选择题(带答 ...

最新文章

  1. 你可能不知道的5种 CSS 和 JS 的交互方式
  2. 整合营销系统推荐乐云seo_做seo优化前需要考虑哪些
  3. 移动端调取摄像头上面如何给出框_飞桨实战笔记:自编写模型如何在服务器和移动端部署...
  4. IT人的十八般武艺-操作系统
  5. 【CSU - 1980 】不堪重负的树(树上区间dp)
  6. linux ethtool命令
  7. 如何在Xcode 4中“添加现有框架”?
  8. 机器学习资料合计(一)
  9. vue-video-player 一款vue的前端视频播放插件 支持m3u8
  10. 计算机软考笔试知识点,计算机软考考试必备知识点:关键链法
  11. Dell台式计算机BIOS放电,戴尔BIOS设置电池维修笔记本电脑电池BIOS设置图形方法...
  12. BUUCTF:小易的U盘
  13. Qlikview 数据加载方法罗列
  14. 信息爆炸,用写作让它慢下来-2023.04.07
  15. Freemaker之代码生成
  16. 2016年头条校招笔试题
  17. Vue源码之用户watcher
  18. C++ :四种强制类型转换
  19. 19英寸标准服务器和网络机柜尺寸表
  20. Javscript 高阶函数(上)

热门文章

  1. window下python安装包问题小结
  2. Java爬虫后台微信小程序之音乐播放器(下)
  3. Vue中使用vue-video-player视频播放器
  4. Debian/Ubuntu安装ps,ping,telnet命令
  5. Cesium渐变色3dtiles白模(视频)
  6. Excel批量替换成强制換行
  7. 多图带您领略Windows 10 Server虚拟化平台风采
  8. ImageNet Classification with Deep Convolutional Neural Networks(AlexNet论文翻译(附原文))
  9. Flutter文本输入框-TextField
  10. Edge浏览器开启下载提速