C语言
M&&C
不定时更新
展开
-
下面的代码片段的输出是什么,为什么? char *ptr; if ((ptr = (char *)malloc(0)) == NULL) puts(“Got a null pointer“);
测试代码如下:#include <stdio.h>#include <malloc.h>int main(){ char *ptr; if((ptr = (char *)malloc(0)) == NULL) puts("got a null pointer\n"); else puts("got a valid pointer\n"); int.原创 2021-06-04 10:41:58 · 554 阅读 · 0 评论 -
一语句实现x是否为2的若干次幂的判断。
x如果是2的若干次幂,那么它的二进制就只有一个1原创 2021-06-04 10:09:59 · 1092 阅读 · 0 评论 -
int func(int a) { int b; switch(a) { case 1: 30; case 2: 20; case 3: 16; default: 0 } return b; }
运行结果如下:如果case之后没有break;就会顺序执行一直到最后的default。原创 2021-06-04 09:26:36 · 1190 阅读 · 0 评论 -
基本数据类型及auto,register,static分析
摘要: 解释了c语言中什么是数据类型,什么是变量,他们的真正含义是什么。分析了属性关键字auto,register和static的用法。一、什么是数据类型刚看视频的时候,我也理解为就是char,int这些东西,其实这些东西也是指定了我们后面变量他所占的内存的大小,所以数据类型其实是固定内存大小的别名。数据类型又是创建变量的模子。比如我们char a;a是我们用模子创建出来的,名字叫做a,它的大小是1个字节。任何我们用char创建出来的变量,大小都是一个字节,虽然名称不同,但是他们所占的内存大小是一样转载 2021-06-04 09:00:44 · 839 阅读 · 0 评论 -
int a[60][250][1000]面试题
请问下面程序有什么错误?int a[60][250][1000];int i,j,k;for(k=0;k<60;k++)for(j=0;j<250;j++)for(i=0;i<1000;i++)a[k][j][i]=1;答案是把循环语句内外换一下。不过运行之后编译器依旧不通过。(换循环语句是为了提高程序运行的效率)1.在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。2.k<=1000也是考点!3.栈溢转载 2021-06-03 20:21:43 · 527 阅读 · 0 评论 -
在C++程序中调用被C编译器编译后的函数为什么要加extern“C”?
转自https://blog.csdn.net/ygm_linux/article/details/26626893在C++程序中调用被C编译器编译后的函数为什么要加extern“C”?在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声转载 2021-06-03 17:27:23 · 687 阅读 · 0 评论 -
用两个栈模拟实现一个队列
以下是“用两个栈模拟实现一个队列的”的相关链接1点击打开2点击打开转载 2021-06-03 11:29:55 · 63 阅读 · 0 评论 -
什么是预处理?什么情况下需要预处理?
什么是预编译:预编译又称为预处理 , 是做些代码文本的替换工作。处理以# 开头的指令 , 比如拷贝 #include 包含的文件代码,#define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。C 编译系统在对程序进行通常的编译之前,首先进行预处理。c 提供的预处理功能主要有以下三种:1 )宏定义 2 )文件包含 3 )条件编译何时需要预编译:总是使用不经常改转载 2021-06-03 10:39:40 · 4778 阅读 · 0 评论 -
static全局变量与普通的全局变量的区别
static全局变量与普通的全局变量的区别转载 2021-06-03 10:34:00 · 57 阅读 · 0 评论 -
const修饰的变量
const修饰的变量转载 2021-06-03 10:07:21 · 174 阅读 · 0 评论 -
const有用途
const关键字的作用主要有以下几点:(1)可以定义const常量,具有不可变性。 例如:const int Max=100; int Array[Max];(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int i) { …} 编译器就会知道i是一个常量,不允许修改;(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,转载 2021-06-01 16:34:48 · 87 阅读 · 0 评论 -
#include <filename.h> 和 #include “filename.h” 有什么区别?
答案:对于#include <filename.h> ,编译器从标准库路径开始搜索 filename.h ; 对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h 。1.双引号:引用非标准库的头文件,编译器首先在程序源文件所在目录查找,如果未找到,则去系统默认目录查找,通常用于引用用户自定义的头文件。2.尖扩号:只在系统默认目录(在Linux系统中通常为/usr/in.原创 2021-06-01 16:00:56 · 1681 阅读 · 0 评论 -
c/c++内存分配、指针和数组对比
点击查看转载 2021-06-01 15:03:18 · 53 阅读 · 0 评论 -
Getmemory函数详解--内存操作的理解
题目:void GetMemory(char *p){p = (char *)malloc(100);}void Test(void){char *str = NULL;GetMemory(str);strcpy(str, “hello world”);printf(str);}请问运行Test 函数会有什么样的结果?分析:程序崩溃。因为GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。strcpy(str, “hello world”);将.转载 2021-06-01 13:45:44 · 630 阅读 · 1 评论 -
函数参数传递三种方式(传值方式,地址传递,引用传递)
函数参数传递三种方式(传值方式,地址传递,引用传递)形参与实参形参即形式上的参数,对实参的一种抽象类型描述只是声明一个函数能够接受什么类型的实参,而不确定接受的实参的具体内容是什么实参即传递给函数对应形参的具体内容参数传递两种方式–传值&传址传值方式:将实参的值拷贝给函数或方法,在函数内对形参进行操作,操作的对象是实参的拷贝,对实参本身没有影响,在函数结束返回后,形参被丢弃释放,实参的内容不会被改变传址方式:将实参的地址传递给函数,在函数内对形参进行操作等同于对实参进行相同的操作,在函数转载 2021-06-01 10:49:57 · 11303 阅读 · 2 评论 -
c,c++中struct的区别
原创 2021-05-31 20:20:59 · 41 阅读 · 0 评论 -
For的死循环(逗号表达式)
For的死循环(逗号表达式)实例一for(i=0 ,printf(“First=%d \n”,i );i<10 ,printf(“Second=%d \n”,i );i++ ,printf(“Third=%d\n”,i )){printf(“Fourth=%d \n”,i);}在学习逗号表达式的时候,我看到了上面的一个例子,拿到编译环境进行调试的时候,发现竟然是一个死循环。我就纳闷了,这个不就是一个普通的死循环加上了输出语句,为何就变成了死循环呢?运行结果如下:为了避免错误,我把转载 2021-05-30 17:09:20 · 3203 阅读 · 0 评论