精华内容
下载资源
问答
  • C语言有多少关键字?

    千次阅读 2018-08-04 14:17:52
    当被问到C语言有多少关键字时,很多老铁,都会说32,但是,其实你说说的不对,因为没有加前提! C语言的32关键字:(C99版本中,记住要说前提哦,很重要的!!!) 1.存储类型关键字(4) auto:自动...

    当被问到C语言中有多少关键字时,很多老铁,都会说32个,但是,其实你说说的不对,因为没有加前提!

    C语言的32个关键字:(C99版本中,记住要说前提哦,很重要的!!!)

    1.存储类型关键字(4个)
    • auto:自动存储

    • static:静态存储

    • register:寄存器存储

    • extern:声明一个外部的全局变量

    2.数据类型关键字(12个)
    • char :字符型变量或函数 (1byte)

    • double :双精度变量或函数 (8byte)

    • enum :枚举类型

    • float:浮点型变量或函数 (4byte)

    • int: 整型变量或函数 (4byte)

    • long :长整型变量或函数 (4byte)

    • short :短整型变量或函数 (2byte)

    • signed:有符号类型变量或函数

    • struct:结构体变量或函数

    • union:联合数据类型

    • unsigned:无符号类型变量或函数

    • void :函数无返回值或无参数,无类型指针 ,

             修饰函数,说明函数无返回值;
             修饰指针,说明指针是不确定数据类型的指针
      
    3.控制语句关键字(12个)
    • for:循环语句
    • do :循环语句的循环体
    • while :循环语句的循环条件
    • break:跳出当前循环
    • continue:结束当前循环,开始下一轮循环
    • if: 条件语句
    • else :条件语句否定分支(与 if 连用)
    • goto:无条件跳转语句
    • switch :用于开关语句
    • case:开关语句分支
    • default
    4. 其它关键字(4个)
    • const :声明只读变量
    • sizeof:计算数据类型长度
    • typedef:用以给数据类型取别名(当然还有其他作用
    • volatile:说明变量在程序执行中可被隐含地改变
    • return :子程序返回语句(可以带参数,也看不带参数)
    展开全文
  • 这两个函数是整形数组里的库函数 文章目录这两个函数是整形数组里的库函数一、memcpy--类型不限函数简介函数实现二、memove函数函数简介总结 一、memcpy–类型不限 函数简介 数memcy从source的位置开始向后复制num...

    这两个函数是整形数组里的库函数


    一、memcpy–类型不限

    函数简介

    数memcy从source的位置开始向后复制num个字 节的数据到destination的内存位置。
    ●这个函数在遇到’\0’的时候并不会停下来。
    ●如果source和destination有 任何的重叠, 复制的结果都是未定义的。

    memcpy(arr1, arr2);//函数名(目的地,源头,num)num要拷贝多少字节

    函数实现

    void* my_memcpy(void* dest, const void* src, size_t num)
    {
    	void* ret = dest;
    	
    	while (num--){
    	*(char*)dest = *(char*)src;//强制类型转换成位char类型一字节每次拷贝一个字节
    	++(char*)dest;
    	++(char*)src;
    }
    return ret;
    }
    

    二、memove函数

    函数简介

    void *memmove(void *str1, const void *str2, size_t n) 从 str2 复制 n 个字符到 str1,但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。

    原理相同的话,但拷贝的方法不同,一个是从前往后拷贝
    而memove是还会根据数据的不同进行相应的判断,判断号拷贝的区域使用从前向后拷贝是否会出现
    原有数据被覆盖或者丢失的情况

    void* my_memove(void* dest, const void* src, size_t num)
    {
    	void* ret = dest;
    	if (dest < src)
    	{    //从前向后面拷贝
    
    		while (num--) {
    			*(char*)dest = *(char*)src;//强制类型转换成位char类型一字节每次拷贝一个字节
    			++(char*)dest;
    			++(char*)src;
    		}
    	}
    	else//后-》前
    	{//以防数据重叠导致数据的丢失
    		*((char*)dest + num) = *((char*)src+ num); 
    			
    				
    
    	}
    return ret;
    }
    

    总结

    库函数memcpy其实可以胜任自己拷贝自己的情况的,但是有些编译器不行,因为以C99的标准memcpy只需要完成拷贝工作即可但自己拷贝自己的时候,你得使用memove这个函数,才能完成这个工作

    展开全文
  • C语言中的atoi函数的实现

    千次阅读 2016-04-30 11:00:30
    C语言很多的库函数,其实平时没事的时候多去实现一下里面的库函数还是很有用的,下面就来讲一讲C语言中的atoi函数,这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个很简单...

           C语言中有很多的库函数,其实平时没事的时候多去实现一下里面的库函数还是很有用的,下面就来讲一讲C语言中的atoi函数,这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个很简单的函数,甚至是一个不需要多少行代码就可以实现的函数。其实这是一个看着很简单,但是实践起来还有些需要注意的地方。

           如果直接给你一道题目,说让你实现一个函数,功能是将你输入的字符串转化为数字,相信这道题大家都会说简单,但是如果你真的能把所有的情况都考虑进去,那么可以说你是一个注重细节的人,因为这里需要考虑很多情况。总的来说,有以下5种情况:

    1--指针为NULL
    2--空字符处理
    3--正号与负号的处理
    4--溢出处理
    5--如果遇到异常字符怎么处理

    下面附上我测试的代码:

    #include<stdio.h>
    #include<assert.h>
    #include<stdlib.h>
    #include<ctype.h>
    #include<limits.h>
    enum Ret                                              //状态,用来输入是否合理
    {
    	VALID,
    	INVALID,
    };
    enum Ret state = INVALID;
    int My_atoi(const char *str)
    {
    	int flag = 1;                                 //用来记录是正数还是负数
    	long long ret = 0;
    	assert(str);                                  
    	if (str == NULL)
    	{
    		return 0;
    	}
    	if (*str == '\0')
    	{
    		return (int)ret;
    	}
    	while (isspace(*str))                        //若是空字符串就继续往后
    	{
    		str++;
    	}
    	if (*str == '-')
    	{
    		flag = -1;
    	}
    	if (*str == '+' || *str == '-')
    	{
    		str++;
    	}
    	while (*str)
    	{
    		if (*str >= '0' && *str <= '9')
    		{
    			ret = ret * 10 + flag * (*str - '0');                
    			if (ret>INT_MAX||ret<INT_MIN)                 //判定是否溢出了
    			{
    				ret = 0;
    				break;
    			}
    		}
    		else
    		{
    			break;
    		}
    		str++;
    	}
    	if (*str == '\0')                  //这里while循环结束后,此时只有*str == '\0'才是合法的输入
    	{
    		state = VALID;
    	}
    	return ret;
    }
    int main()
    {
    	char arr[20];
    	int ret = 0;
    	printf("请输入您要转化的字符串:\n");
    	scanf("%s", arr);
    	ret = My_atoi(arr);
    	if (VALID == state)
    	{
    		printf("%d\n", ret);
    	}
    	else
    	{
    		printf("输入非法\n");
    		printf("%d\n", ret);
    	}
    	return 0;
    }
          可能还有需要改进的地方,总之没有最完美的代码,只有更完美的代码。

    展开全文
  • 补充一点,在函数原型int printf(const char *format,...)中,固定参数不一定只有一个,有可能有多个,不管有多少个,va_start中一定是最后一个固定的参数,后续可变参数就用va_arg来接收,va_end来结束。

    转载自C语言中文网,链接如下:点击打开链接

    补充一点,在函数原型int printf(const char *format,...)中,固定参数不一定只有一个,有可能有多个,不管有多少个,va_start中一定是最后一个固定的参数,后续可变参数就用va_arg来接收,va_end来结束。

    展开全文
  • c语言函数

    2019-09-25 20:08:43
    听着函数这两字多多少少都会觉得有点复杂吧。因为一想到函数大多数人都会想到f(x),但其实c语言里面的函数不是那样的,老师教了一很好的理解方法函数就是机器人,而这机器人是你自己做出来的。所有不用怕它...
  • c语言】malloc函数详解

    万次阅读 多人点赞 2018-07-29 11:35:53
    谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道。 关于malloc相关的几个函数 关于malloc我们进入Linux man一下就会得到如下结果: 也可以这样认为(window下)原型: ...
  • C语言字符串分割函数split实现

    千次阅读 2018-01-20 13:25:55
    参考了到处是“坑”的strtok()—解读strtok()的隐含特性这一篇博文, 概括来说C语言在string.h中的strtok()以下几坑: 不可重入原字符串被修改连续的分隔符被当做一分隔符处理忽略开头结尾的分隔符 不过...
  • 谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道。1、关于malloc相关的几个函数关于malloc我们进入Linux man一下就会得到如下结果:也可以这样认为(window下)原型:extern void...
  • 5学生坐在一起,问第5学生多少岁,他说比第4学生大2岁。 问第4学生岁数,他说比第3学生大2岁。 问第3学生,又说比第2学生大2岁。 问第⒉学生,说比第1学生大2岁。 最后问第1学生,他说是10岁。 请问...
  • C语言日期函数日期处理函数 定义一表示日期的结构体类型再分别定义函数完成下列功能计算某一天是对应年的第几天这一年一共多少天计算两日期之间相隔的天数两日期由键盘输入 算法思想 设定结构体类型表示日期...
  • 统计一文件有多少行 fgets()函数是一行输入的函数,行输入的函数一般有4种情况来刷新缓冲区: 1:缓冲区满了 2:用fllush刷新缓冲区函数 3:流的关闭 4:遇到‘\n’ fgets()达到文件尾或读出错返回NULL。可以用...
  • 请用c语言编写函数实现,输入一句英文句子,计算这句话中有多少个单词(单词使用空格隔开) </p>
  •  在做C语言开发,尤其是嵌入式开发的时候,经常会用到字符串的处理函数,虽然C语言提供了很多库函数用以处理字符串,但是都不够智能化,所以常常需要自己...  现在就根据这个函数,来实现智能化的字符串切
  • 首先,小问题:int *ptr(int) int (*ptr)(int) 如果你了解这两种用法的含义,并且能够熟练运用这两种指针用法,那么这篇文章对你来说并没有多少参考价值。一、指针函数: 指针函数的基本形式是 类型说明符 * ...
  • 函数在编程语言或计算机内存系统中会一个存放的地址空间,也就是存放运行指令或二进制数据的地址空间,函数所占用的内存是一块连续的地址空间,我们要访问这个函数,首先要找到函数对应的地址,就好比我们要串门去...
  • c语言 malloc函数详解

    2020-12-25 22:16:29
    谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道。 1、关于malloc相关的几个函数 关于malloc我们进入Linux man一下就会得到如下结果:   也可以这样认为(window下)...
  • /* 统计一文件有多少行*fgets()函数是一行缓冲的函数*行缓冲的函数一般有4种情况来刷新缓冲区:*1:缓冲区满了*2:用fllush刷新缓冲区函数*3:流的关闭*4:遇到‘\n’*fgets()达到文件尾或读出错返回NULL。...
  • 求一有多少位 输入:一(100,10000)之间的数(根据实际需要修改起来很容易) 输出:这数是几位数 #include<stdio.h> #define N 4 //输入范围位数上界 int pow1(int n,int i) //求次方数的函数 { int ...
  • 只要我们需要,要打印多少个参数就可以打印多少个,这样就发现和我们平常定义的函数有区别了吧,这个就是可变参数函数的魅力所在。 看一个列子: /***************************************************************...
  • ** 这个函数返回参数值中值为 1 的位的个数。 */ int count_one_bits0(unsigned value) { int ones; for (ones = 0; value != 0; value = value >> 1) { if (value % 2 != 0) ones = ones + 1; } ...
  • C语言函数调用约定

    2019-10-05 17:00:11
    C语言中,假设我们这样的一个函数:int function(int a,int b)调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,一个问题就凸现出来:在...
  • C语言可变参函数分析

    2019-07-01 15:04:00
    可变参函数指的是参数总个数不固定,只有调用时才知道到底有多少个参数 下面实现一个任意多个整数求和的可变参函数: int Sum(int nItemCount, ...) { int i = 0, sum = 0; va_list vp; va_start(vp, ...
  • c语言函数调用定.doc

    2020-08-14 06:26:55
    NUMPAGES 在C语言中假设我们这样的一个函数 int functionint aint b 调用时只要用result = function12这样的方式就可以使用这个函数但是当高级语言被编译成计算机可以识别的机器码时一个问题就凸现出来在CPU中...
  • C语言变参函数解析

    2019-07-24 15:00:42
    ...)这样编译器才能知道这个函数是变参函数。这个参数与变参函数的内部实现完全没有关系,只是让编译器在编译调用此类函数的语句时不计较参数多少老老实实地把全部参数压栈而不报错,当然...之前至少要一个普通的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 798
精华内容 319
关键字:

c语言有多少个函数

c语言 订阅