C语言经典试题--指针
分享一道C语言的经典的题目.题目要求如下:
利用字符指针实现字符串1“I Love China”与字符串2“So do I”的输出。然后利用字符指针将字符串2的内容复制到字符串1中,然后输出字符串1.
乍一看,没什么大的问题,用一个strcpy()函数直接就可以解决掉,但是仔细读题,指针!当时就没怎么学懂,所以在这,记录一下血与泪的辛酸史.
一、问题思路与代码
先看下面一段代码:
1 char string1[50]="I Love China.";
2 char string2[50]="So do I.";
3 char * p1,* p2;
4 p1=string1;
5 p2=string2;
很简单的两句话,初始化指针为两个字符串的首地址.
接着,尝试把字符串输出.
1 for(p1;*p1!=0;p1++)
2 {
3 printf("%c",*p1);
4 }
string2原理相同,到这的话还是很简单的嘛.
接下来,我们需要将字符串2的内容复制到字符串1中,啊哈,这才是重头戏.
首先,我们一定要初始化指针,否则就是在原先的指针之后进行操作,然后进行如下操作:
1 for(;*p2!='\0';p2++,p1++)
2 {//将string2赋值到string1并将其覆盖
3 *p1=*p2;
4 }
5 *p1='\0';
通过判断是p2的地址否到达字符串的最后,来将他们的指针的值进行交换,输出string1.好,问题解决.
二、思考
解决上一个问题之后,我们可以在这个问题上升升级,问题如果变成这样呢?
利用字符指针实现字符串1“I Love China”与字符串2“So do I”的输出。然后利用字符指针将字符串2的内容连接到字符串1中,然后输出字符串1.
同样,在使用过指正之后应该将指针初始化,这是一个良好的习惯.
然后,定义一个空指针p,使他初始化为string1(因为在开始初始化的时候,我们使用*p1来储存string1中的值,所以这时候 1 for(p=p1;*p!='\0';p++); 就在通过指针间的作用将p进行初始化,这里我是为了使p指针移动到p1后的位置).
1 char *p;
2 int i;
3 for(p=p1;*p!='\0';p++);
4 for(i=0;*(p2+i)!='\0';i++,p++)
5 {
6 *p=*(p2+i);
7 }
8 *p='\0';
随后,将p2的指针值添加到p后,这样就完成了.
C语言经典试题--指针的更多相关文章
- 【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)
经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n ...
- C语言面试题大汇总之华为面试题 Eddy整理
1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局 ...
- C语言面试题1
1.分析下面代码有什么问题? 1 2 3 4 5 6 void test1() { char string[10]; char* str1 = "0123456789"; s ...
- 嵌入式开发—C语言面试题
嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929 1. 用预处理指令#define 声明一个常数,用 ...
- C语言经典例题100
C语言经典例题100 来源 http://www.fishc.com 适合初学者 ----------------------------------------------------------- ...
- C语言面试题汇总之一
C语言面试题汇总之一 1.static有什么用途?(请至少说明两种) l 限制变量的作用域: 设置变量的存储域. 2.引用和指针有什么区别? 引用必须被初始化,指针不必: 引用初始化以后不能被改变,指 ...
- 12个有趣的C语言面试题
摘要:12个C语言面试题,涉及指针.进程.运算.结构体.函数.内存,看看你能做出几个! 1.gets()函数 问:请找出下面代码里的问题: #include<stdio.h> int ma ...
- c语言面试题之sizeof
c语言面试题之sizeof */--> c语言面试题之sizeof Table of Contents 1. sizeof 1 sizeof sizeof是c语言中判断数据类型或者表达式的长度符 ...
- C语言面试题(嵌入式开发方向,附答案及点评)
整理自C语言面试题(嵌入式开发方向,附答案及点评) 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SEC ...
随机推荐
- 电脑华硕A455L系列,机械硬盘换成固态硬盘,光驱位改放机械硬盘
电脑一直以来都很卡,直到最近用的不舒服了,就去查查原因,发现是磁盘读取爆表!只好想起来换固态硬盘,光驱改放机械硬盘... 买的固态硬盘是个杂牌军,但是店家说工艺不错,只好将信将疑,用用再说吧. 首先确 ...
- 多篇开源CVPR 2020 语义分割论文
多篇开源CVPR 2020 语义分割论文 前言 1. DynamicRouting:针对语义分割的动态路径选择网络 Learning Dynamic Routing for Semantic Segm ...
- 多核片上系统(SoC)架构的嵌入式DSP软件设计
多核片上系统(SoC)架构的嵌入式DSP软件设计 Multicore a System-on-a-Chip (SoC) Architecture SoCs的软件开发涉及到基于最强大的计算模型在各种处理 ...
- TensorFlow中的语义分割套件
TensorFlow中的语义分割套件 描述 该存储库用作语义细分套件.目标是轻松实现,训练和测试新的语义细分模型!完成以下内容: 训练和测试方式 资料扩充 几种最先进的模型.轻松随插即用 能够使用任何 ...
- C#中使用swagger小技巧
C#中使用swagger小技巧 swaggerUI显示的接口内容主要用于开发阶段便于与前端联调,不适合发布到对外的站点. 有以下两种方式,让接口不显示在SwaggerUI中 1.使用属性 [ApiEx ...
- 基于Typescript的Vue项目配置国际化
基于Typescript的Vue项目配置国际化 简介 使用vue-i18n插件对基于Typescript的vue项目配置国际化,切换多种语言, 配合element-ui或者其他UI库 本文以配置中英文 ...
- 合宙Luat | 电源设计——模块应用必看的2个要点
在模块应用设计中,电源设计是很重要的一部分. 由于射频发射时,会在短时间有一个较大电流的突发脉冲.在突发脉冲阶段内,电源必须能够提供高的峰值电流,不然有可能会引起供电电压的跌落. 而很多初学的朋友 ...
- es6 快速入门 系列 —— promise
其他章节请看: es6 快速入门 系列 Promise Promise 是一种异步编程的选择 初步认识Promise 用 Promise 来实现这样一个功能:发送一个 ajax,返回后输出 json ...
- ANDROID开发之OOM:一张图片(BitMap)占用内存的计算 图片内存优化
Android中一张图片(BitMap)占用的内存主要和以下几个因数有关:图片长度,图片宽度,单位像素占用的字节数. 一张图片(BitMap)占用的内存=图片长度*图片宽度*单位像素占用的字节数 注: ...
- Kubernetes通过downwardAPI传递元数据
应用往往需要获取所运行环境的一些信息,包括应用自身以及集群中其他组件的信息.Kubernetes可以通过环境变量以及DNS进行服务发现,但其他信息如何处理呢?下面将介绍特定pod和容器元数据如何被传递 ...