初学者C语言练习题-指针
四、指针
说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解。
不了解的对指针的理解就停留在“指针就是变量的地址”这句话,会比较害怕使用指针,特别是各种高级操作。
而了解内存模型的则可以把指针用得炉火纯青!
想学好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语言练习题-指针相关推荐
- 初学者C语言练习题-入门
一.入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级语 ...
- 初学者C语言练习题-结构体
五.结构体 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{ 结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多 ...
- 初学者对C语言中指针的爱恨情仇
C语言中指针和数组的爱恨情仇 文章目录 C语言中指针和数组的爱恨情仇 一.前言 二.为什么学指针 三.说明 四.跟我一起学 (一)C语言中的*和& 1.C语言中为什么存在&和* 2.& ...
- C语言语句单选题,C语言练习题
C语言练习题 C一个switch语句总是可以被一系列ifelse语句替换 D switch语句的测试表达式可以是任何类型 E当执行break语句时程序将停止执行 20在C语言中,在int num[5] ...
- 初学者c语言编程软件_C初学者手册:仅需几个小时即可学习C编程语言基础知识
初学者c语言编程软件 This C Beginner's Handbook follows the 80/20 rule. You'll learn 80% of the C programming ...
- C语言练习题的错题集
@C语言练习题错题集 判断题错题集 1.在对数组全部元素赋初值时,不可以省略行数,但能省略列数. 对于数组来说,列数是不可以省略的,相反的可以省略行数. 2.数组名就是一个指针常量,指向数组的首元素( ...
- c语言有三级指针,C语言 三级指针的应用
//三级指针的使用 #define _CRT_SECURE_NO_WARNINGS #include #include #include //三级指针做输出 int getmun(char ***po ...
- c语言中用指针的必要性,浅析C语言使用指针的必要性.pdf
第 21 卷第 8 期长春大学学报Vol 21No 8 2011 年 8 月 JOURNAL OF CHANGCHUN UNIVERSITYAug 2011 收稿日期 2011 06 20 作者简介 ...
- c语言中5l是数值或字符常量,C语言练习题-选择题(带答案)
以下为<C语言练习题-选择题(带答案)>的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览.图片预览是什么样的,下载的文档就是什么样的. C语言练习题-选择题(带答 ...
最新文章
- 你可能不知道的5种 CSS 和 JS 的交互方式
- 整合营销系统推荐乐云seo_做seo优化前需要考虑哪些
- 移动端调取摄像头上面如何给出框_飞桨实战笔记:自编写模型如何在服务器和移动端部署...
- IT人的十八般武艺-操作系统
- 【CSU - 1980 】不堪重负的树(树上区间dp)
- linux ethtool命令
- 如何在Xcode 4中“添加现有框架”?
- 机器学习资料合计(一)
- vue-video-player 一款vue的前端视频播放插件 支持m3u8
- 计算机软考笔试知识点,计算机软考考试必备知识点:关键链法
- Dell台式计算机BIOS放电,戴尔BIOS设置电池维修笔记本电脑电池BIOS设置图形方法...
- BUUCTF:小易的U盘
- Qlikview 数据加载方法罗列
- 信息爆炸,用写作让它慢下来-2023.04.07
- Freemaker之代码生成
- 2016年头条校招笔试题
- Vue源码之用户watcher
- C++ :四种强制类型转换
- 19英寸标准服务器和网络机柜尺寸表
- Javscript 高阶函数(上)
热门文章
- window下python安装包问题小结
- Java爬虫后台微信小程序之音乐播放器(下)
- Vue中使用vue-video-player视频播放器
- Debian/Ubuntu安装ps,ping,telnet命令
- Cesium渐变色3dtiles白模(视频)
- Excel批量替换成强制換行
- 多图带您领略Windows 10 Server虚拟化平台风采
- ImageNet Classification with Deep Convolutional Neural Networks(AlexNet论文翻译(附原文))
- Flutter文本输入框-TextField
- Edge浏览器开启下载提速