![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言的经典问题
niepangu
这个作者很懒,什么都没留下…
展开
-
C C++有关内存的思考题
void GetMemory(char *p){ p = (char *)malloc(100);}void Test(void){ char *str = NULL; GetMemory(str); strcpy(str, “hello world”); printf(str);}请问运行Test 函数会有什么样的结果?转载 2016-03-18 19:22:52 · 520 阅读 · 0 评论 -
全面解析《嵌入式程序员应该知道的16个问题》
全面解析《嵌入式程序员应该知道的16个问题》----Sailor_forever分析整理,sailing_9806@163.comhttp://blog.csdn.net/sailor_8318/archive/2008/03/25/2215041.aspx 1、预处理器(Preprocessor)2、如何定义宏3、预处理器标识#error的目的是什么?4、死循环转载 2016-04-23 15:07:20 · 461 阅读 · 0 评论 -
析构函数中不能抛出异常的原因
1. 如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。2. 通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。转载 2016-04-22 21:04:59 · 484 阅读 · 0 评论 -
关于线程的经典解答
下文来自于windows核心编程第6章 线程的基础知识理解线程是非常关键的,因为每个进程至少需要一个线程。本章将更加详细地介绍线程的知识。尤其是要讲述进程与线程之间存在多大的差别,它们各自具有什么作用。还要介绍系统如何使用线程内核对象来管理线程。与进程内核对象一样,线程内核对象也拥有属性,我们将要观察许多用于查询和修改这些属性的函数。此外还要介绍可以在进程中创建和生成更多的原创 2016-04-22 20:58:10 · 1153 阅读 · 0 评论 -
指针的本质是无符号的整形
执行如下语句将输出什么结果?得到的结果我是很意外的,全部是4(32位系统) printf("sizeof(void *) = %d\n",sizeof(void *)) ; printf("sizeof(char*) = %d\n",sizeof(char *)) ; printf("sizeof(int*) = %d\n",sizeof(int *))原创 2016-04-21 21:17:04 · 2502 阅读 · 0 评论 -
malloc的内存分配之 malloc(0)的内存分配情况
#includeusing namespace std;int main(){ char *p; if((p=(char *)malloc(0))==NULL) puts("got a null pointer"); else puts("got a valid pointer"转载 2016-04-21 21:02:58 · 409 阅读 · 0 评论 -
一道关于返回指针和返回数组名的面试题
函数返回指针和返回数组名有什么区别先看一个例子:#includeusingnamespace std; char *fun(void){char *p="hello the world"; char buffer[] = "hello the world";return p; //这里为什么可以返回局部定义的指针?// return bu转载 2016-04-11 22:07:47 · 467 阅读 · 0 评论 -
为什么浮点数不能直接与零值比较?谢谢
这是程序员面试的一道常见题,也是个C++基础问题。若只在大学里看过几本基础的编程入门书,看见这道题可能会觉得奇怪,不就是和0比较吗,直接拿出来比就是了,其实非也。下文引自google搜索结果,出处不详,高手可以无视,菜菜留下,记得做好笔记。 首先给个提示:题目中要求的是零值比较,而非与0进行比较,在C++里“零值”的范围可就大了,可以是0, 0.0 ,FALSE或者“空指针”。 ①转载 2016-04-11 08:00:42 · 2694 阅读 · 0 评论 -
C语言函数返回类型为指针时的一些问题
1.先看程序:#includechar *returnStr(){ char *p = “tigerjibo”; return p;}int main(){ char*str; str =returnStr();转载 2016-04-11 07:25:46 · 778 阅读 · 0 评论 -
C语音switch参数的类型问题
标准定义:switch 语句后面的表达式可以是整型,字符型,枚举型因为byte能够无损的转换为int,但是如果是long类型,转换会有丢失,所以不行原创 2016-04-10 19:51:46 · 2329 阅读 · 0 评论 -
char* s="AAA"; printf("%s",s); s[0]='B'; printf("%s",s); 有什么错?如何改
char* s="AAA"; //s是一般的指针,但是存放的是字符串常量首地址 printf("%s",s); s[0]='B';//编译正确,运行出错,因为s[0]='B'试图修改字符串常量,字符串常量不能 修改,一般情况下给字符串常量赋值推荐做法是:const char* s="AAA";这样当编译器发现修改字符串常量内容时,就会直接报错。转载 2016-04-10 19:15:45 · 9839 阅读 · 0 评论 -
C语言中,数组名作为参数传递给函数时,退化为指针
C语言中,数组名作为参数传递给函数时,退化为指针;需要数组大小时,需要一个参数传数组名,另一个传数组大小。数组名做函数参数时,就相当于指针了。sizeof对指针操作结果应该是4。 一般函数参数为数组时,可以有两个参数,一个数组名,一个数组长度的。首先C语言里面不支持数组作为形参来进行调用,例如函数void fun(int a[]);里面的a实际上在进行编译转载 2016-04-10 19:07:47 · 1515 阅读 · 0 评论 -
(转)从一道面试题来搞清楚数组指针
下段代码的运行结果:main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); } 答:2,5 *(a+1)就是a[1],*(ptr-1)就是a[4],执转载 2016-04-09 16:07:50 · 379 阅读 · 0 评论 -
const的常见用法
const用法主要是防止定义的对象再次被修改,定义对象变量时要初始化变量 下面我就介绍一下几种常见的用法1.用于定义常量变量,这样这个变量在后面就不可以再被修改 const int Val = 10; //Val = 20; //错误,不可被修改 2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这转载 2015-03-27 08:06:11 · 506 阅读 · 0 评论 -
问题:const和volatile是否可以同时修饰一个变量?有什么含义?
问题:const和volatile是否可以同时修饰一个变量?有什么含义?答案:如果一个变量不会被本程序改变,通常可能给它加上const,但如果该变量可能被其他程序改变而本程序又在检测这个变量的值,就需要给它加上volatile,于是变量就同时有volatile和const了,这个时候i具有const和volatile的双重属性。i变量不可以在编译过程中被程序代码修改,同时编译器不得对i进行转载 2015-09-20 23:06:24 · 903 阅读 · 0 评论 -
栈,堆,全局,文字常量,代码区总结
一. 区域划分堆: 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是 thread safe的。每个C ++对转载 2016-03-07 19:47:36 · 767 阅读 · 0 评论 -
百度面试题:宏的概念,与函数的区别,优缺点的比较
宏宏概念:C++ 宏定义将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替。宏书写形式:#define () 宏与函数的区别:时间上考虑:1:宏只占编译时间,函数调用则占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏会较慢。2:使用宏次数多时,宏展开后源程序转载 2016-04-07 18:51:14 · 848 阅读 · 0 评论 -
解析一个有关sizeof用法的题目--sizeof(i++)
代码如下: #include int main() { int i; i = 10; printf("%d\n", i); printf("%d\n", sizeof(i++)); printf("%d\n", i); return 0; }这三行输出应该是什么?答案是:10410第三个为什么不是转载 2016-04-07 20:05:15 · 715 阅读 · 0 评论 -
C语音常用排序算法 (冒泡 选择 快速 插入)
(1)“冒泡法” 冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列出其代码:void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/ { int i,j,temp; for(i=0;i<n-1;i+转载 2016-05-01 15:29:11 · 633 阅读 · 0 评论