C语言程序设计辅导答疑记录
- 格式:doc
- 大小:36.50 KB
- 文档页数:2
C语言程序设计基本知识点解答(一)第○章计算机基础知识Q001 计算机的基本原理是什么?(计算机的基本原理)A001 计算机的基本原理有两个:1.二进制:是指计算机中所有的信息都是以二进制形式的数据来表示、存储、传递和运算的。
2.存储程序控制:是指在利用计算机解决问题时,首先需要人找出解决方法,然后将这个方法用某种计算机语言转换成计算机程序(包含了原始数据和处理指令),再送入计算机中存储,最后由人发出命令,计算机开始按照程序中的指令和流程执行这个程序(即对数据进行加工处理)。
Q002 为什么计算机内部使用二进制?(二进制)A002 使用二进制的主要原因是:1.物理上很容易实现两种相对立的稳定的能量状态(如晶体管的导通与不导通、高电平与低电平、磁性材料中剩磁的顺时针或逆时针方向等)2.二进制数据的运算规则数量少而且简单,操作实现简便Q003 计算机硬件的基本结构是什么?(硬件)A003硬件系统主机外设中央处理器CPU内存储器运算器控制器外存储器输入输出设备(I/O)存储器Q004 计算机硬件系统的核心部件有哪些?它们的作用是什么?(硬件)A004 计算机硬件系统的四大核心部件是控制器、运算器、存储器和输入输出设备。
其中:控制器是计算机的指挥控制中心。
其主要功能是识别翻译指令代码并向计算机各部分发出适当的控制信号,以便执行机器指令。
运算器是对数据进行加工、运算的部件。
其主要功能是对二进制数据进行算术运算和逻辑运算。
存储器是存放数据和程序的部件。
其主要功能是按照要求向指定的位置存进或取出信息。
输入设备的功能是将数据和程序送入到计算机的存储器中。
常见的输入设备有键盘、鼠标等。
输出设备的功能是将计算机产生的结果送出计算机外。
常见的输出设备有显示器、打印机等。
Q005 计算机的基本工作过程是怎样的?(硬件)(工作过程)A005控制流数据流Q006 内存储器和外存储器有哪些区别?(存储器)(内存)A006 主要区别如下表所示:Q007 什么叫存储单元的“位”和“字节”?(内存)(字节)(位)A007 “位”(bit):是最小的电子线路单元,只能保存一位二进制数即一个0或一个1。
实验五任务1:程序调试。
函数调用、函数定义及函数说明的情况。
(1)下列程序有错误吗?请思考函数定义在后,且调用前没有函数说明的情况。
答:有错误。
“f”找不到标识符。
修改后程序如下:(2)下列程序有问题吗?请思考函数定义在后,且调用前对函数进行说明的情况。
注意函数说明的形式。
答:会显示未定义y。
修改后程序如下:(3)下列程序有问题吗?请思考函数定义在后,且调用前对函数进行说明的情况。
答:没有问题。
(4)下列程序有问题吗?请思考:函数定义在调用前,是否一定需要函数说明?答:程序没有问题。
不一定需要函数说明。
(5)下列程序调用系统函数进行计算。
当程序运行时,如输入a>0,则计算a的b次方;如果输入a<0,则计算(-a)的b次方。
程序有多处错误,请改正。
修改后代码如下:任务2:程序调试与程序设计。
字符串系统是strlen、strcat、strcpy、strcmp在程序设计中的应用。
仿照下列程序,调用有关字符串的系统函数对字符串进行长度测试、连接、复制、比较。
(1)调试程序。
程序如下:运行结果如下:(2)重新定义str,其功能是字符串长度。
程序如下:运行结果如下:(3)程序功能是比较字符串的大小,请定义str。
程序如下:运行结果如下:(4)程序的功能是连接两个字符串。
程序如下:运行结果如下:任务3:程序设计。
默认参数的构造函数的设计。
程序如下:任务4:程序设计。
重载函数的设计。
设计一个函数。
调用add,可以完成整型、双精度及混合数的加法。
如果是字符串,则表示字符串的连接。
设计代码如下:任务5:程序设计。
重载构造函数的设计。
设计代码及运行结果如下:(2)仿照程序,把整型改成字符串并达到相同效果。
设计代码及运行结果如下:程序如下:任务7:程序调试与设计。
递归函数的应用。
(1)调试程序。
程序如下:(2)重新设计,功能是将十进制转化成八进制。
设计代码如下:(3)程序功能是把十进制转化为十六进制。
设计代码如下:。
(2009.06.09)C语言程序设计课程期末复习辅导与答疑(文本)徐孝凯:欢迎参加C语言程序设计课程的网上教学答疑辅导活动!徐孝凯:上届试卷供参考!见附件。
高洪超:谢谢您吕昱渲:计算机二级考试考些什么?徐孝凯:请看它们的教学大纲和有关资料!刘亚鹏:数据类型与表达式徐孝凯:请看书!汪婷:寻求答案:编写C程序一般需经过的几个步骤依次是徐孝凯:按照结构化的程序设计方法分析编写思路;编写出各个功能模块的函数;最后编写出主函数和给出相应的预处理命令。
黄新佳:怎么样学习这门课?我看了本门课程的教学要求,可我觉得好难学习的,怎么样才能学好这么课程呀?徐孝凯:按照教材的章节顺序学习,并结合上机运行程序!黄新佳:练习题:形成性作业是必须做的吗?每章的后面都有练习题,也要做吗?哪里有答案吗?徐孝凯:形成性作业必须做!书中的练习题选做!没有现成的答案!王昆:如何考试?老师您好,这门课如何考试,是笔试还是上机,如何复习,谢谢!徐孝凯:请参考该课程的期末复习指导!顾闻:考试范围:我想知道一下这次C语言期终考试的考试范围是什么,谢谢徐孝凯:参考期末复习指导和往届试卷!彭璐:问题:以前学过C语言,没有学的好,不知有什么好的方法学好。
徐孝凯:重新学应该容易了!但也还要认真和努力!秦宁远:老师你好,如何快速有效的学习啊徐孝凯:没有捷径可走,循序渐进学习!黄晓冬:您好,徐老师!今天的辅导是什么内容,考试复习资料:形考作业册、复习指导册、09年1月的一份试卷,除了这些,还有什么复习资料吗徐孝凯:就这些资料,没有其他的资料!张喆:老师,您好!我想请教您,本学期C语言程序设计的复习资料包括:形成性考核作业、期末复习指导、上届的考试试题,还有其他复习资料吗?麻烦您了,谢谢!徐孝凯:没有其他资料了!沈慧娟:徐老师好!您辛苦啦!徐孝凯:沈老师好!你们面对学生教学不容易!需要耐心和时间!沈慧娟:该课程的形考作业是如何要求的?徐孝凯:按照考核说明的要求,占总成绩的20%。
C语言作业答疑在学习C语言的过程中,同学们难免会遇到一些问题和困惑。
本文将围绕一些常见的C语言作业问题展开讨论,并给出详细的答疑解析。
希望通过本文的阅读,能够帮助同学们更好地理解和掌握C语言的知识。
1. 如何输出Hello World?在C语言中,要输出Hello World非常简单,只需要使用printf函数即可。
示例代码如下:```c#include <stdio.h>int main() {printf("Hello World\n");return 0;}```上述代码中,`#include <stdio.h>` 表示包含了标准输入输出库的相关函数,`printf` 是C语言中用于输出的函数,其中的双引号内的内容就是要输出的字符串"Hello World"。
在末尾加上`\n`表示换行,最后通过`return 0`语句表示程序正常结束。
2. 如何进行变量的声明和赋值?在C语言中,可以通过以下方式声明变量:```c<数据类型> <变量名>;```其中,`<数据类型>` 表示变量的类型,如int(整型)、float(浮点型)、char(字符型)等,`<变量名>` 则是变量的名称。
例如:```cint num;float average;char letter;```要给变量赋值,可以使用赋值操作符`=`。
示例代码如下:```cint num;num = 10;```上述代码中,首先声明了一个整型变量`num`,然后使用赋值操作符`=`将值10赋给了`num`。
此外,还可以在声明变量的同时进行赋值,示例代码如下:```cint num = 10;```在上述代码中,变量`num`的声明和赋值同时完成,将值10赋给了`num`。
3. 如何进行基本的算术运算?C语言中提供了基本的算术运算符,可以用于进行加减乘除等运算。
C语言题目答疑带参考答案一、请问C语言中的自动变量和静态变量有何区别?自动变量和静态变量是C语言中两种不同类型的变量。
它们的区别主要体现在生命周期和作用域上。
1. 自动变量:自动变量是在代码块(函数、循环等)执行过程中动态创建和销毁的变量。
它的特点如下:- 生命周期:自动变量在每次执行代码块时创建,代码块结束时销毁。
每次执行代码块时,自动变量都会重新初始化为初始值。
- 作用域:自动变量的作用域仅限于所在的代码块内。
在代码块外部无法访问自动变量。
2. 静态变量:静态变量是在程序运行期间一直存在的变量。
它的特点如下:- 生命周期:静态变量在程序启动时创建,程序结束时销毁。
静态变量在内存中的位置保持不变,即使在函数调用过程中也不会被销毁。
- 作用域:静态变量的作用域限定在声明它的代码块内,但其可见性在整个程序中都是有效的,即使在其他代码块内也可以访问。
二、请问C语言中的extern关键字有什么作用?extern关键字用于声明外部变量或函数,其作用如下:1. 声明外部变量:使用extern关键字可以在一个源文件中声明在其他源文件中定义的全局变量。
例如,如果一个全局变量在文件A.c中定义,在文件B.c中如果要使用该变量,就需要在B.c中使用extern关键字进行声明。
示例:在A.c中定义全局变量:```cint globalVariable = 10;```在B.c中使用全局变量:```cextern int globalVariable;// 在B.c中可以使用globalVariable变量了```2. 声明外部函数:使用extern关键字可以在一个源文件中声明在其他源文件中定义的函数。
当一个函数需要在多个源文件中使用时,可以在其它源文件中使用extern关键字进行声明。
示例:在A.c中定义函数:```cint add(int a, int b) {return a + b;}```在B.c中使用函数:```cextern int add(int a, int b);// 在B.c中可以调用add函数了```总结:extern关键字可以扩展变量和函数的作用范围,使其在其他源文件中也能被正确使用。
变量与表达式主要内容•变量的命名、类型以及赋值的方法•表达式以及运算符的优先级•值类型以及引用类型2.1 变量概述•概念:变量代表了存储单元,每个变量都有一个类型。
这决定了这个变量可以存储什么值。
C#是类型安全语言,并且每个C#编译器会保证存储在变量中的值总是恰当的类型。
•使用原则:变量必须先定义后使用。
•赋值:可以定义时赋值,也可以在定义的时候不赋值。
一个定义时被赋了值的变量很好地定义了一个初始值。
而一个定义时不被赋值的变量没有初始值。
要给一个定义时没有被赋值的变量赋值必须是在一段可执行的代码中进行2.1.1 变量的声明•变量的声明采用如下的规则:<type> <name>;其中type是变量的类型,name是变量的名称。
例如:int a;double d;•可以在声明变量的同时为变量赋初值,如:double d=2.4;string s=“hello CSharp”;2.1.2 变量的命名•变量的命名规则如下:–变量名的第一个字符必须是字母、下划线("_")或者"@"。
–除去第一个字母外,其余的字母可以是字母、数字、下划线的组合。
–不可以使用对C#编译器而言有特定含义的名字(即C#语言的库函数名称和关键字名称)作为变量名,如using 、namespace 、struct等等。
注:命名规则的第三条其实在写程序的时候系统会自动提示你的错误的,所以不必过于担心。
•例子:•C#.NET 对于大小写字母是敏感的,所以在声明以及使用变量的时候要注意这些,例如Variable 、variable 、V ARIABLE 是3个不同的变量。
2.1.2 变量的命名•命名规范:–Pascal (帕斯卡命名法)首字母和后面的每个单词的首字母都大写,其他字母小写 。
–Camel (骆驼命名法)首字母小写,而后面的每个单词的首字母大写,其他字母小写。
注:•一般类名和方法用Pascal 命名法,变量和方法参数使用Camel 命名法; •不要使用匈牙利方法来命名变量(如:string m_sName; int nAge ),这种方式在.NET 编码规范中是不推荐的;•可根据公司或项目组的约定来选择规范2.1.2 变量的命名•命名法举例:– 下面是Pascal 命名法的举例:•Age•SumOfApple•DayOfWeek– 下面是camel 命名法的举例:•age•sumOfApple•dayOfWeek2.1.3变量的种类•在C#语言中,我们把变量分为七种类型,分别是:静态变量(Static Variables )非静态变量(Instance Variables )数组元素(Array Elements )值参数(Value Parameters )引用参数(Reference Parameters )输出参数(Output Parameters )下面的变量名是错误的:345abcclassw-d-m 下面的命名则是正确的: wdm _myVariable VAR局部变量(Local Variables)。
c程序设计基础教程课后答案在编写C程序设计基础教程的课后答案时,需要考虑到教程中所涵盖的知识点,包括但不限于数据类型、控制结构、数组、指针、函数、结构体、文件操作等。
以下是一些可能的课后问题及其答案的样例。
第一章:C语言概述问题1:请简述C语言的特点。
答案:C语言是一种结构化编程语言,具有以下特点:简洁、高效、可移植、具有丰富的运算符、直接支持硬件、广泛应用于系统软件的开发。
问题2:C语言的主要应用领域有哪些?答案:C语言主要应用于操作系统、嵌入式系统、高性能计算、数据库管理系统、网络通信等领域。
第二章:基本数据类型与运算符问题1:C语言中的基本数据类型有哪些?答案:C语言的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)等。
问题2:请解释赋值运算符的用法。
答案:赋值运算符(=)用于将右侧表达式的值赋给左侧的变量。
例如:`int a; a = 5;` 将整数5赋值给变量a。
第三章:控制结构问题1:C语言中的选择结构有哪些?答案:C语言中的选择结构主要有if语句、if...else语句、switch语句。
问题2:请用伪代码描述for循环的基本结构。
答案:```for (初始化表达式; 条件表达式; 迭代表达式) {// 循环体}```第四章:数组问题1:什么是一维数组?答案:一维数组是相同数据类型的元素的集合,这些元素在内存中连续存储,可以通过索引访问。
问题2:如何声明一个整型数组?答案:可以这样声明一个整型数组:`int arr[10];` 这表示声明了一个可以存储10个整数的数组。
第五章:指针问题1:什么是指针?答案:指针是一种变量,它存储了另一个变量的内存地址。
问题2:如何声明一个指针变量?答案:声明指针的一般形式为:`类型 *变量名;` 例如,声明一个整型指针:`int *p;`第六章:函数问题1:函数在C语言中的作用是什么?答案:函数用于实现代码的模块化,可以重复使用,提高代码的可读性和可维护性。
《C语言程序设计》问题答疑材料一、常见问题总结1.判断字符串a是否大于b,应当使用?库函数strcmp(),或者自己编写相应的函数比较,主要是字符串从左往右依次比较相应位置的字符大小。
2.一个C程序的执行是从什么开始?什么结束?从main函数的第一行开始,到main函数最后一行结束。
因为一个程序有且只有一个main函数,其他函数都是在main函数里面调用执行的。
3.C语言中用于结构化程序设计的三种基本结构是什么?顺序结构、选择结构、循环结构4.指向函数的指针是什么意思?指向函数的指针叫“函数指针”,是一个是指针变量。
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。
有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。
5.循环语句中的break和continue有何区别?break 用于跳出循环,执行循环体的下一条语句,而continue 只是结束本次循环,然后还要判断条件,看看能不能继续下一次循环!6.C语言有哪些数据类型以及这些数据类型进行混合运算时遵循什么原则?数据类型包括:int,double,float,bool,char,struct,enum和union;混合运算时要保持类型一致,因而往往需要转换变量的数据类型,低级的数据类型要向高级类型转换!7.函数的嵌套调用和递归调用有什么不同?嵌套调用的函数不能是本身,递归调用的函数是本身。
8.传递地址和传递变量的区别?C语言中没有“变量传递”的概念,应该是“形参变量向实参变量的值传递”。
(1)、在C语言中,所有非数组形式的数据实参都是以值传递的形式调用,在值传递的过程中,被调用函数的形式参数被视为该函数的局部变量,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。
所以被调用函数不能修改作为实参的实际变量的值,而只能修改传递给他的那份备份。
C语言程序设计基本知识点解答(三)第五章选择结构程序设计Q116 如何进行选择结构的程序设计?(选择结构)A116 “选择结构”也可以叫做“分支结构”。
在一个合理Array的“选择结构”中,总是先进行某个条件的判断,然后根据判断的结果选择执行预先设定的操作。
其流程图如下:可见,要想实现“选择结构”,需要2个条件:①能表达条件判断的运算符:即关系运算符和逻辑运算符②能实现判断并选择的控制语句:即if和switch语句Q117 什么是关系运算符?(关系运算符)A117 关系运算符也叫“比较运算符”,用于对两个数据进行比较判断的。
C语言中一共有6种关系运算符,分别是 < 小于、<= 小于等于、> 大于、>= 大于等于、== 等于、!= 不等于。
用这6种运算符按规定把运算量连接起来构成的式子就是关系表达式。
其中,参与关系运算的数据可以是常量、变量或任何合法的表达式。
比如:a * a <= 100、NowIndex == MaxIndex。
所有6种关系运算符的优先级都比算术运算符低,而== 等于、!= 不等于两个运算符的优先级又比其它四个关系运算符低。
所有6种关系运算符的结合性都是从左向右。
Q118 C语言中如何表示一个关系表达式的值?(关系表达式)A118 关系表达式进行的是关系运算,也就是“比较运算”。
比较的结果只可能有两个:“真”或“假”。
对应于实际生活中,就是“成立”还是“不成立”,“正确”还是“不正确”,“对”还是“不对”这样一些比较和判断的结果。
可见,关系运算的结果的特点是:只有两种可能的结果;任何时候答案只可能是其中的一个;两种可能是相互对立不可能同时出现的。
这样的特点正对应于数学上的“逻辑值”:“真”或“假”。
所以最终的结论就是:关系表达式的值是“逻辑值”,即“真”或“假”。
C语言中分别以“1”和“0”来代表。
就是说,如果关系表达式的值为“真”,则得到整数1;如果值为“假”,则得到整数0。
C语言答疑提纲分别从下面几个方面重点答疑:1. C语言基本语法知识2. C语言的数据类型3. C函数、调用及其相关参数一、C语言基本语法知识此部分主要围绕C语言语法知识进行介绍。
(1) C程序的构成1、C语言程序基本构成•函数与主函数•程序由一个或多个函数组成•必须有且只能有一个主函数main()•程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。
•程序语句•C程序由语句组成•用“;”作为语句终止符•注释•/* */为注释,不能嵌套•不产生编译代码•编译预处理命令程序编写规范要求:•习惯用小写字母,大小写敏感•不使用行号,无程序行概念•可使用空行和空格•常用锯齿形书写格式2、C语句特点C语句:以“;”作分隔符,编译后产生机器指令.C语句分类表达式语句:表达式加分号构成。
空语句:;程序控制语句(9种):分支:if( )~else~ ;switch循环:for( )~;while( )~;do~while( )辅助控制:continue;break;goto;return复合语句:用{…}括起来的一组语句一般形式:{ [数据说明部分;]执行语句部分;}说明:“}”后不加分号语法上和单一语句相同复合语句可嵌套注意事项:单分支、多分支语句的嵌套问题辅助控制语句的作用,尤其是switch分支中break语句作用。
3、常见运算符:二、C语言的数据类型C语言提供了强大丰富的数据类型,供程序人员使用,其具体分类见下图所示。
数据类型作用,主要为决定:1. 数据占内存字节数int类型数据占4个内存字节;char类型数据占一个内存字节;float类型数据占4个内存字节。
2. 数据取值范围不同数据类型取值范围不同,在程序设计开发过程中需要防止出现操作溢出等错误。
3. 其上可进行的操作1、简单数据类型及其取值范围2、构造数据类型1)数组:有序数据的集合,用数组名标识。
其元素属同一数据类型,用数组名和下标确定。
第1讲6.6.1初学者疑问解答
第一习题:为什么命名要见名知意呢
如下代码,这种代码合作者不能看懂,因为现在软件开发需要团队合作,需要别人都能看懂。
第二题:一个头文件内部有一个变量还有一个函数,重复包含出错怎么办。
1、这是头文件1.h
2、这是源文件main().c
3、这是go.c文件
4、运行结果出错,如下
5、包含的含义就是将文件内容一并载入,所以出现函数重名和变量重名
6、解决办法如下:
方法1,将头文件修改为:
方法2,将头文件只包括头文件
把头文件声明的,放到对应的源文件中定义,如下:
习题三,C语言如何解决多文件函数名冲突问题
在一个源文件中包含了一个函数定义:
在main()函数中包含如下:
由于都包含了printf()函数的定义,所以出错,如下:
修改办法是,将go.c中修改如下就可以:
习题四,为什么说文件读写可以操作计算机的一切呢
C语言操纵设备,如下:
上面的scanf和printf函数可以修改如下:
上面涉及到键盘的输入和屏幕显示设备,所以说说文件读写可以操作计算机。
2004年秋季《C++程序设计语言》复习语音答疑2004年秋季《C++程序设计语言》语音复习题一、判断分析题(正确的画上√,错误的画上╳)1.C++支持的多态性包括通过重载运算符和重载函数支持编译时的动态多态性,以及通过虚函数支持运行时的静态多态性。
【╳】2.能访问一个类CMyClass中的private成员的可以是类CMyClass的成员函数,友元函数和公有派生类中的成员函数。
【╳】3.语句“ int (*p)(int x, int y,float z);”说明了p是一个指向整数的指针。
【╳】4.C++程序的内存格局通常分为全局数据区、代码区、栈区和堆区,malloc()、free()系统函数和new、delete算符都是从堆中进行分配和释放。
【√】5.现在有以下语句:char * p1[]={“China”,“Japan”,“Korea”,“Russia”,“Vietnam”};char p2[]={“Hello,everyone”};int s1=sizeof (p1);int s2=sizeof(p2);int s3=strlen(p2);则变量s1, s2, s3的值分别为20,15,14。
【√】6.如果一个类的所有对象都共享某一个变量,则应当将该变量定义为该类的static成员。
【√】7.在C++中用new分配的内存空间,在不需要时一般用free将该空间释放。
【╳】8.C++中,如果条件表达式值为-1,则表示逻辑为假。
【╳】9.C++中的多态性就是指在编译时,编译器对同一个函数调用,根据情况调用不同的实现代码。
【╳】10.能访问一个类CMyClass中的private成员的可以是类CMyClass的成员函数,友元函数和友元类中的成员函数。
【√】二、程序填空题1.以下函数完成求两个数n1和n2的最大公约数。
#include <iostream.h>int fac(int n1, int n2){ int tmp;if( ① ) // n1 < n2{ tmp = n1;n1 = n2 ;n2 = tmp ;}while( ② ) // n1 % n2 != 0 或 n1 % n2{ tmp = n1 % n2; n1 = n2 ; n2 = tmp;}return n2;}2.以下函数完成求表达式 100100...)1()1(44332211)(1001432-++-+-+-++--++-=-x i x i x x x x x sum i i i的值,请填空使之完成此功能。
1.这样的初始化有什么问题?char *p = malloc(10); 编译器提示“非法初始式” 云云。
答:这个声明是静态或非局部变量吗?函数调用只能出现在自动变量(即局部非静态变量) 的初始式中。
因为静态变量的地址必须在编译的过程中就确定下来而malloc()申请的内存地址是在运行时确定的。
2. *p++ 自增p 还是p 所指向的变量?答:后缀++ 和-- 操作符本质上比前缀一目操作的优先级高, 因此*p++ 和*(p++) 等价, 它自增p 并返回p 自增之前所指向的值。
要自增p 指向的值, 使用(*p)++, 如果副作用的顺序无关紧要也可以使用++*p。
3 我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。
为什么如下的代码((int *)p)++; 不行?答:在C 语言中, 类型转换意味着“把这些二进制位看作另一种类型, 并作相应的对待”; 这是一个转换操作符,根据定义它只能生成一个右值(rvalue)。
而右值既不能赋值, 也不能用++ 自增。
(如果编译器支持这样的扩展,那要么是一个错误, 要么是有意作出的非标准扩展。
) 要达到你的目的可以用:p = (char *)((int *)p + 1);或者,因为p 是char * 型, 直接用p += sizeof(int);4.空指针和未初始化的指针是一回事吗?答:空指针在概念上不同于未初始化的指针:空指针可以确保不指向任何对象或函数;而未初始化指针则可能指向任何地方。
5.我可以用0来表示空指针吗?答:根据语言定义, 在指针上下文中的常数0 会在编译时转换为空指针。
也就是说, 在初始化、赋值或比较的时候,如果一边是指针类型的值或表达式, 编译器可以确定另一边的常数0 为空指针并生成正确的空指针值。
因此下边的代码段完全合法:char *p = 0;if(p != 0)然而, 传入函数的参数不一定被当作指针环境, 因而编译器可能不能识别未加修饰的0 “表示” 指针。