C语言测试题的讲解分析(转)

c语言试题及答案详解 c语言练习题及答案,八套模拟试题,还有1000道题库试题,让你考试无忧 立即下载
下面是网友Jackie214发布的答案,其认真态度令我深受感动.这些题是我2000年在做培训时为学员们设计的,但我已经近6年没有接触过vc++下的c语言编程了,有9年没接触unix下的c语言编程了,所以,除了一些核心思想令我终生难忘外,其他一些语法细节和当初出题的意图何在,我也差不多忘记了!前天把这个测试题发布出来,是因为前一阵才知道我多年前写的一些内容又要被别人加入到其书籍中出版(我只是对一些人惯于借鉴别人的东西而当作自己成就的性格很不赞赏,但这般行为在商业上来说是无可厚非,甚至是值得学习,只是我自己做不出这样的事情来,反而有点自己没胆量吃葡萄,就说吃葡萄的人酸),当时非常生气,就又翻腾出了这些快被自己遗忘的东西,前几天就顺便把这个测试题发表在自己的blog里了.我没有受过正规的计算机教育,除了自学过谭浩强的那本入门级的c语言,也没有看过c语言方面的经典名著,很多东西都是自己瞎摸索出来的,所以有自己的讲课思路,但不一定严谨,还请看客多多谅解!
另外,我有过一段开发实践和教学经历后,回过头来看谭老爷子的那本c语言书,觉得写得真的很不好,没抓主重点,讲解也不通俗,很多人都这么认为,但也没有人能下定决心,吃上两年的苦,写一被绝对好过老谭的书,我曾经有过这般想法,但一直未能实施!我期望书能通过试验来让读者轻松学懂,并且学懂后还不容易忘记,所以要把原理性的东西用通俗易懂的方式表现出来,还要高度总结出核心思想,如果谁有这方面的心愿,不妨与我合作!
下面是网友Jackie214发布的答案,随后是我的一点补充.
Jackie214 发表于2006-05-19 11:47 AM  IP: 61.154.9.*
int x=35;
char str[10];

//问:strlen(str)和sizeof(str)的值分别是多少?
// strlen(str) 值不确定,strlen根据'/0'确定字符串是否结束。
// sizeof(str)=10 sizeof一个数组为数组长度

strcpy(str,"www.it315.org"/*共13个字母*/);
//问:此时x和strlen(str)的值分别是多少?
// x 为35
// strcpy(char* dest, const char* src)
// 根据src来复制dest,依照src的'/0'决定复制的长度,而dest必须要提供足够的长度,这里会引起溢出,strlen返回13,但是数组外部的数据已经被破坏
//(作者注:我下面给出了更确切的答案 )

str="it315.org";//编译能通过吗?
// 数组不能赋值,只能初始化。char str[10] = "it315.org";
// 而且初始化时编译器会检查数组的长度与初始化串的长度是否匹配

char *pstr;
strcpy(pstr,"http://www.it315.org");
//上句编译能通过吗?运行时有问题吗?
// 可以通过编译,但是pstr指向了常量区,运行时最好只做读操作,写操作不保险
//(作者注:我下面给出了更确切的答案 )

const char *p1;
char * const p2;
//上面两句有什么区别吗?
// const char* 和 char const* 一样,都是表示指向常量的字符指针。
// char * const 表示指向字符的常量指针

p1=(const char *)str;
//如果是p1=str;编译能够通过吗?明白为什么要类型转换?类型转换的本质是什么?
// 可以通过编译。关于常量与非常量指针的关系是这样的:
// const指针可以指向const或者非const区域,不会造成什么问题。
// 非const指针不能指向const区域,会引起错误。

strcpy(p1,"abc");//编译能够通过吗?
// 不能通过,strcpy( char*, const char*); char* 不能指向const char*

printf("%d",str);//有问题吗?
// 没有问题,输出的是str的地址信息。

pstr=3000;//编译能过吗?如果不行,该如何修改以保证编译通过呢?
// 不能通过,char* pstr表示pstr是个字符指针,不能指向3000的整形变量。
// 修改的话,可以这样:pstr = (char*)3000,把pstr指向3000这个地址;

long y=(long)pstr;//可以这样做吗?
// 可以,y的值为pstr所指的地址。不过如果是纯粹要地址的话,最好是用unsigned long。

int *p=str;
*p=0x00313200;
printf("%s",str);//会是什么效果?提示0x31对应字符'1',0x32对应字符'2'。
// 首先编译未必会过关,有些编译器可能不允许int * 直接指向char*。最好是改为int *p = (int*)str;
// 过关了效果就是什么东西都没有。int *p=str; p为str所指的地址,*p表示修改了str所指向的内存。
// 由于sizeof(int)在32位机上,int有4个字节(其实具体要看编译器的配置文件,好像是limit.h,一般是4个字节)所以修改了str[0]-str[3]
// 由于0x00313200头尾都是0,所以字符串为'/0'开头,什么都打印不出来。这里有个Big-endin和little-endin的问题。以0x31323334为例
// little-endin的机器上面,0x31323334在内存中排列顺序为34 33 32 31,输出为4321,如INTEL芯片的pc
// big-endin机器上面为31 32 33 34 ,输出为1234,如IBM POWERPC

p=3000;//p+1的结果会是多少?
// 3000+sizeof(int); 指针+1均为原来地址加上sizeof(指针所指的数据类型)

char *pc=new char[100];//上述语句在内存中占据几个内存块,怎样的布局情况?
// 本身pc会占用函数栈一个4字节的指针长度(具体是否为4个字节要看机器和编译器)。
// new会在堆上申请100个字节sizeof(char)的连续空间。

void test(char **p)
{
*p=new char[100];
}//这个编译函数有问题吗?外面要调用这个函数,该怎样传递参数?
// 该程序没有问题。需要在函数中对指针所指的地址进行变化是必须传人指针的地址。
// 原因是这样的:如果传入的为指针本身,在函数调用的时候,实参会被复制一个实例,这样就不是原来的指针了,对该指针本身进行的任何改变都不能传递回去了。
// 可以这样理解,如果传入的参数为int,那么对int本身的值的改变就传不回去啦,加个*也是一样的。


//能明白typedef int (*PFUN)(int x,int y)及其作用吗?
// 定义了一个函数指针类型的宏,这样PFUN就表示指向返回值为int,且同时带2个int参数的函数指针类型了。
// 可以用来定义这样的变量:
// 比如有个函数为int fun( int x, int y );
// PFUN p = fun;
//(作者注:我下面给出了更确切的答案) 
--------------------------------------------------------------------------------------------------------------
下面是我的一点补充:
第二题:
int x=35;
char str[10];
strcpy(str,"www.it315.org"/*共13个字母*/);
//问:此时x和strlen(str)的值分别是多少?
答:strlen的值为13,在VC++环境下,x的值是要改变的(其他编译器下没试,).虽然表面上看来,在程序中并没有修改x的值,但是实际运行的结果是上面的x的值发生了修改,这是因为strcpy以后,把多余的数据拷贝进了str的邻居(int类型的x)中,所以x的数据也就变了.这是一个曾让我刻骨铭心的问题,在我刚出道时遇到这个问题,虽然在朋友的帮助下解决了这个问题,但一直不明白x的值为何变了,只有最后走上培训教师的岗位,才开始梳理自己曾经的困惑,才开始总结以前的经验供学员们借鉴.我觉得这个题目的价值非常之大,它能引起学员对字符串拷贝越界问题的足够重视,并且通过这个问题更能明白字符串的处理是怎么回时,更能明白字符串与字符数组的关系:字符串就是一个字符数组,只是把这个字符数组用在处理串的函数中时,这些函数不考虑数组的长度,只是记住数组的首地址,从首地址开始处理,并在遇到0时结束处理,
第四题:
char *pstr;
strcpy(pstr,"http://www.it315.org");
//上句编译能通过吗?运行时有问题吗?
答: 编译可以通过,但是pstr没有进行有效的初始化,它指向了一个不确定的内存区,运行时会出现内存不可写错误!
最后一题:
//能明白typedef int (*PFUN)(int x,int y)及其作用吗?
答:函数指针最大的用处在于它可以被一个模板方法调用,这是我在学java的设计模式时领悟到的.例如,有两个函数的流程结构完全一致,只是内部调用的具体函数不同,如下所示:
void func1()
{
         //一段流程代码和面向方面的代理,如安全检查,日志记录等
         int sum = add( x , y);
        //一段流程代码和面向方面的代理,如安全检查,日志记录等
}
void func2()
{
         //与func1完全相同的一段流程代码和面向方面的代理,如安全检查,日志记录等
         int difference = sub( x , y);
        //与func1完全相同的一段流程代码和面向方面的代理,如安全检查,日志记录等
}
那么,可以只定义一个函数,如下所示
void func(PFUNC p)
{
         //与func1完全相同的一段流程代码和面向方面的代理,如安全检查,日志记录等
         int difference = p( x , y);
        //与func1完全相同的一段流程代码和面向方面的代理,如安全检查,日志记录等
}
调用程序在调用时,让参数p分别指向add和sub函数就可以了.
对于其他题目的讲解,由于我目前写作和工作的重点已完全不在c语言方面了,也没有时间一一解答,就借用Jackie214发布的答案来回应大家.
CTP-API开发系列之三:柜台系统简介 综合交易平台(Comprehensive Transaction Platform,CTP)是专门为期货公司开发的一套期货经纪业务管理系统,由交易、风险控制和结算三大系统组成。接下来分享的内容,对于期货公司的负责交易、运维同事会比较熟悉,针对CTP-API接口对接的朋友可以了解一下,在接口之上的系统是怎样的。 阅读详情

相关推荐

华为海思2026届数字IC秋招笔试真题解析与实战技巧(2025最新版)

本文深度解析华为海思2026届数字IC秋招笔试真题,涵盖高频考点如后端设计、低功耗设计、SystemVerilog语法等核心内容。提供时序违例修复、时钟树综合等实战技巧,帮助考生高效备考。特别关注UPF低功耗设计规范等最新考点,助力考生在秋招笔试中脱颖而出。

lg888的博客 1089

已完结:C语言经典100题目(满足所有C程序基础)

C语言基础100题,适合新手,编程初学者,编程爱好者。此100题涵盖了C语言基本的结构,算法,指针,结构体等,祝你在代码中旅途愉快!!! 100 basic C language questions, suitable for beginners, programming beginners, and programming enthusiasts. These 100 questions cover the basic structures, algorithms, pointers, structure

qq_58645222的博客 4万+

【HAL库-STM】智能温控按键小风扇【胎教级教学】

硬件设备:DHT11,0.96寸oled屏,二/三/四线风扇(不挑),面包板 、f10的精英板等等。当人在的风扇面前时可以自行控制风扇,不在面前时又想开风扇就让他温控自行开启,(在这里有一个想法就是加上蓝牙和wifi控制的功能能够远程遥控,这个如果做的再全一点就要自主研发是一个多功能app,这里没有做。针对这个dht11,我一开始是卡在了这个check函数里面,一直是我给完dht11低电平和高电平后,dht11不回复我低电平和高电平,这个不是我的问题,当时代码是没毛病的,这个点一直卡着我。吐血五天实现小成品

weixin_52451652的博客 1740

[C语言] [试题详解] 求1000之内的所有 完数

题目>>> 一个数如果恰好等于它的因子之和,这个数就称为“完数”。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。 编程序找出1000之内的所有完数,并按下列格式输出其因子。 6 its factors are 1、2、3。 注意: 完数定义:某自然数除它本身以外的所有因子之和等于该数,则该数被称为完数。所以1不是完数,就不用考虑1啦。^ ^ 思考>&g...

博主学浅才疏,权当信笔涂鸦。嘿嘿,就算是记录我的学习历程吧,不过有时我会写得很细,但解题思路常常只有一种,别介意哈 ^ ^ (也许能学到一点点)。希望大家多来踩踩,顺便可以关注我,一起交流学习。 2万+

欧姆龙 CJ1W-SCU模块使用通配符+结束码实现非固定长度数据的接收

实验设备:CJ2M-CPU33、CJ1W-SCU21、XW2Z-200T 实验目的:了解 CJ1W-SCU 通配符使用 1.硬件接线: CJ1W-SCU21单元号拨码置于8,使用串口1(232口)。 2.软件设置: ① 新建工程,选择PLC型号CJ2M-CPU33,切换到编程模式,如下图: 、 ② 创建I/O并进行相关配置,如下图: ③ 设置为用户设置,协议宏模式,8位数据位,2位停止位,偶校验9600波特率,如下图: 、 ④ 打开CX-Protocal软件,新建工程: .

weixin_42118352的博客 1984

开源ISP实战(1)——基于Zynq7020的Vivado工程移植与调试

本文详细介绍了将开源ISP项目移植到正点原子Zynq7020开发板的实战过程。重点阐述了在Vivado中进行工程创建、IP核导入、Block Design框架搭建、时钟配置与管脚约束修改等关键步骤,并提供了系统联调与常见问题的排查思路,为FPGA图像处理开发者提供了完整的移植与调试指南。

weixin_29191081的博客 200

C语言笔试题与答案解析

c语言笔试题

qq_46463934的博客 6156

从防御者视角复盘:用WinArpAttacker和Wireshark在Windows上模拟并检测ARP欺骗攻击

本文详细解析了Windows平台下的ARP欺骗攻击与防御策略,通过WinArpAttacker和Wireshark工具模拟攻击并检测异常流量。文章涵盖实验环境搭建、攻击原理深度解析、流量特征分析及企业级防御方案,帮助安全运维人员全面掌握ARP攻击检测与防护技术。

weixin_30918633的博客 121

C语言试题(答案带解析)

C语言试题(带解析)

zyk141的博客 3746

【Bluedroid】BLE连接过程详解

Bluedroid BLE的链接过程包括扫描、连接和通信三个基本步骤。通过这些步骤,中央设备和外围设备之间可以建立起稳定、高效的通信链路,实现数据传输和控制操作。

byte轻骑兵的技术小窝 1876

RDKit | 基于Murcko骨架聚类化合物库

化合物多样性评估 一种方法是使用合适的指纹技术将化合物矢量化并评估他们之间的距离。这种方法经常被使用,但是对于人类很难直观地理解化合物之间的距离。 基于Murcko骨架,分子大致聚集在化合物骨架中,并且每个簇中的顶部化合物都作为候选化合物。此方法非常符合人类的直觉,因此可以预期人将通过查看候选化合物列表来自动缩小化合物的范围。 Murcko骨架 Mur...

DrugOne 3766

C语言测试题的讲解分析

下面是网友Jackie214发布的答案,其认真态度令我深受感动.这些题是我2000年在做培训时为学员们设计的,但我已经近6年没有接触过vc++下的c语言编程了,有9年没接触unix下的c语言编程了,所以,除了一些核心思想令我终生难忘外,其他一些语法细节和当初出题的意图何在,我也差不多忘记了!前天把这个测试题发布出来,是因为前一阵才知道我多年前写的一些内容又要被别人加入到其书籍中出版(我只是对一

张孝祥专栏 1万+

高温环境下(100℃以上)相机的几种保障方案

高温环境下相机保障措施摘要:针对120℃以上高温环境,相机需采取多重防护:1.散热设计采用金属机身、散热鳍片或风扇;2.关键部件选用耐高温材料(铝合金、特种玻璃);3.电子元件需军规级芯片并做三防处理;4.建议外接电源或耐高温电池。工业相机(如FLIR A655sc、Basler ace)及特种机型(Ximea xiQ)具备高温适应性,普通相机可加装隔热套件配合冷却系统。选择时需关注传感器信噪比和全局快门性能,并设置温度监控保护机制。注意高温会加速设备老化,需定期检测维护。(149字)

start_up_go的博客 1585

【转】C语言测试题的讲解分析

补充:char* p;p = a;// 编译不能通过,未给*p分配内存,不同于下面的做法int a;printf ("%x", &a);// 打印a的地址,好像是在栈区结论:对指针变量,一定要显式分配内存。char* p = new char;以下转自:http://blog.youkuaiyun.com/zhangxiaoxiang/archive/2006/

Peter的专栏 1632

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C语言功力测试题的讲解分析

下面是网友Jackie214发布的答案,其认真态度令我深受感动.这些题是我2000年在做培训时为学员们设计的,但我已经近6年没有接触过vc++下的c语言编程了,有9年没接触unix下的c语言编程了,所以,除了一些核心思想令我终生难忘外,其他一些语法细节和当初出题的意图何在,我也差不多忘记了!前天把这个测试题发布出来,是因为前一阵才知道我多年前写的一些内容又要被别人加入到其书籍中出版(我只是对一些人

御风而行 819

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

c语言测试题及分析

C语言 习题内容: 答案:ABD A.或 (一个为1则为1) B.异或 (不同为1,相同为0) C.与 逻辑运算符(两边条件为真则真,是对条件操作,不是对位操作) D.左位移 E.逻辑非 F.运算取余 答案:B 考查三目运算符。 题意为:如果M为真则返回’Y’,如果假则返回’N’。 注意:非0均为真,而不是只有等于1的时候为真,A为易错选项。 答案:AD A.小数不允许向左位移 B.合法运算 C.允许这样计算 但是不常用 D.浮点值不可以进行位操作 答案:BC A.do while循环语句的循环体至

Mi-ronin的博客 754

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

张孝祥的C语言测试题及讲解分析

 另外,在实际的VC++教学中,发现很少有真正精通了C语言编程的学员,一般都有或多 或少概念不是完全清楚的问题,特别是一些需要丰富的实战经验才能体会和明白的问题,如字符串,指针,类型转换,定义指向函数的指针类型,这也是导致学习 VC++困难的一个原因。下面有几个简单测试将能发现你对C语言的掌握情况。int x=35;char str[10];//问:strlen(str)和size

Garand的专栏 1383
上一篇: linux线程锁
下一篇: CLOSE_WAIT状态的生成原因
guowake
博客等级 码龄19年 62粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值