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 ...
随机推荐
- noip模拟5[string·matrix·big·所驼门王的宝藏]
怎么说呢这一场考得还算可以呢 拿了120pts,主要是最后一个题灵光开窍,想起来是tarjan,然后勉勉强强拿了40pts,本来是可以拿满分的,害 没事考完了就要反思 这场考试我心态超好,从第一个题开 ...
- CUDA C编程接口技术分析
CUDA C编程接口技术分析 编程接口 CUDA C为熟悉C编程语言的用户提供了一个简单的路径,可以方便地编写程序供设备执行. 它由C语言的最小扩展集和运行库组成. 核心语言扩展已经引入:cuda c ...
- CodeGen概述
CodeGen概述 CodeGen是在协同开发环境中工作的软件开发人员可以用来生成源代码的工具.该代码可能是Synergy DBL代码,也可能是其他语言的源代码.CodeGen并不局限于为任何特定的开 ...
- Redis6.x学习笔记(五)哨兵
前言 最近学习Redis6.x,特做笔记以备忘,与大家共学.课程是从私塾在线下载的,他们把架构师课程都放出来了,大家可以去下载学习,不要钱的,地址是http://t.hk.uy/eK7,课程很不错,值 ...
- JVM 的执行子系统
JVM 的执行子系统. 一.Class类文件结构 1. JVM的平台无关性 与平台无关性是建立在操作系统上,虚拟机厂商提供了许多可以运行在各种不同平台的虚拟机,它们都可以载入和执行字节码,从而实现程序 ...
- 已经安装好了tensorboardX,任然报错 No module named ‘tensorboardX‘ ??
问题: 1.在jupyter notebook网页版中已经使用命令pip install tensorboardX来安装tensorboardX包,但是运行程序时仍旧出现错误:No module na ...
- C#基础之checked与 unchecked的使用
C#基础之checked与 unchecked的使用 以上都是C#中的两个关键字的使用.据官网给出的相关介绍是:C# 语句既可以在已检查的上下文中执行,也可以在未检查的上下文中执行. 在已检查的上下文 ...
- 【NX二次开发】常用的标准对话框
1.uc1601 单按钮模态对话框 1 //来自"王牌飞行员_里海"的测试源码(qq群753801561) 2 extern DllExport void ufusr(char * ...
- 【题解】Luogu P1011 车站
题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起( ...
- Python变量小秘密
变量全都是引用 跟其他编程语言不同,Python的变量不是盒子,不会存储数据,它们只是引用,就像标签一样,贴在对象上面. 比如: >>> a = [1, 2, 3] >> ...