c语言函数

C语言函数指针复习小程序

喜夏-厌秋 提交于 2019-11-26 14:07:47
写个程序复习一下函数指针操作: #include <stdlib.h> #include <stdio.h> int add(int a, int b){ return a + b; } void populate_array(int *array, size_t arraySize, int (*getNextValue)(void)) { for (size_t i=0; i<arraySize; i++) array[i] = getNextValue(); } int getNextRandomValue(void) { return rand(); } int main(void) { int(*pAddFunc)(int, int) = & add; printf("%d\n", pAddFunc(1900, 97)); int myarray[10]; populate_array(myarray, 10, getNextRandomValue); for(int i = 0; i < 10; i++) { printf("%d ", myarray[i]); } printf("\n"); return 0; } 程序运行截图: 来源: https://www.cnblogs.com/areful/p/11323387.html

【C语言】memcmp函数的实现

纵饮孤独 提交于 2019-11-26 07:35:40
#include <string.h> int memcmp(const void *buf1, const void *buf2, unsigned int count); 比较内存区域buf1和buf2的前count个字节。 头文件 #include <string.h>或#include<memory.h> 返回值 当buf1<buf2时,返回值<0 当buf1=buf2时,返回值=0 当buf1>buf2时,返回值>0 所以该函数的功能实现为: #include<stdio.h> #include<assert.h> int my_memcmp(char *str1,char *str2,int len) { assert(str1); assert(str2); while(len–) { while(*str1==*str2) { if(*str1==’\0’) return 0; str1++; str2++; } } if(*str1>*str2) return 1; if(*str1<*str2) return -1; } int main() { char *p=“adcc”; char *q=“bac”; printf("%d\n",my_memcmp(p,q,1)); return 0; } 来源: CSDN 作者: weixin_45096886 链接:

C语言

旧街凉风 提交于 2019-11-26 02:31:56
一、编译链接过程 编译 预处理 删除注释,宏替换,头文件展开,条件编译 编译 词法分析,语法分析,语义分析,符号汇总(生成汇编代码) 汇编 将形成的汇编代码转为二进制代码,形成对应的符号表 链接 合并段表以及符号表的重定位 二、指针和数组 数组和指针的区别和联系 联系 表达式中的数组名就是指针 C语言中把数组下标作为指针的偏移量 ==作为函数参数的数组名等同于指针== 区别 数组名在传参时会退化为指针,指针不会(所以一定不要在函数内部对传参后的数组名进行sizeof大小) 内存中数组是一块连续开辟的空间,指针只占一个指针类型的大小空间(32位为4字节,64位为8字节) 数组可以通过下标直接进行访问,指针需要进行计算间接访问 数组名具有常属性,不能进行++,--操作;指针可以 数组指针和指针数组区别 以 int (*p)[n] 为例,从右往左理解,() 高优先级,先定义一个指针,然后看[],说明这是一个指向数组的指针,最后 int 型。 数组指针(int (*p)[n]) 代表一个指向有n个int类型的数组的指针,也叫行指针 指针数组(int *p[n]) 代表一个有n个int* 指针的数组 区别:数组指针由于是一个指针,所以内存中只消耗一个指针大小的空间;指针数组是一个数组,消耗n个对应类型指针大小的空间。 需要注意的点 sizeof字符串指针大小为对应平台下指针大小

C语言查漏补缺

非 Y 不嫁゛ 提交于 2019-11-26 02:30:33
1.C99中struct的柔性数组 // C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员, // 但结构中的柔性数组成员前面必须至少一个其他成员。 // 柔性数组成员允许结构中包含一个大小可变的数组。 // sizeof 返回的这种结构大小不包括柔性数组的内存。 typedef struct st_type { int i; int a[]; // int a[0]; }type_a; // type_a 为 typede f定义的 结构体 st_type 的别名,方便使用 // 定义一个可变长的结构体,用 sizeof(type_a)得到的只有 4,就是 sizeof(i)=sizeof(int)。 // 给结构体分配内存 type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int)); // 为结构体指针 p 分配了一块内存。用 p->a[n]就能简单地访问可变长元素。 // 我们再用 sizeof(*p)测试结构体的大小,发现仍然为 4。 // 在定义这个结构体的时候,模子的大小就已经确定不包含柔性数组的内存大小。 // 柔性数组只是编外人员,不占结构体的编制。 // 用 free 函数来释放内存: // free(p); 2. 利用共用体测试机器大小端 int checkDuan( ) {

c语言round函数使用问题

邮差的信 提交于 2019-11-26 01:38:32
round 是实现四舍五入的函数,但我在使用的时候遇到点问题,编译器一直报错undefined reference to `round' 半天都找不到原因,终于搞清楚了,记在这里,供遇到相同问题的朋友参考。 首先给出函数原型 double round( double x ); float round( float x ); // C++ only long double round( long double x ); // C++ only float roundf( float x ); long double roundl( long double x ); 使用示例 // crt_round.c // Build with: cl /W3 /Tc crt_round.c // This example displays the rounded results of // the floating-point values 2.499999, -2.499999, // 2.8, -2.8, 2.5 and -2.5. #include <math.h> #include <stdio.h> int main( void ) { double x = 2.499999; float y = 2.8f; long double z = 2.5; printf("round(%f)

C语言学习笔记———函数

一曲冷凌霜 提交于 2019-11-26 00:15:01
  前面介绍了C语言一些基本的语法组成,无非就是表达式,语句,运算符。这些都是元素可以组合成C语言程序的基本单位,函数。这个函数和数学里的函数,还是有区别的。函数在C语言里面,是对某一个过程的封装,也是对代码的一个复用。还是简单的介绍一下,函数的一些常见用法吧。   大家多少都学习过数学,我们先了解一下,C语言里面,如何表达数学中的函数。先来看一个简单的例子,求一个数的绝对值。    double y(double x) { return x >= 0 ? x : -x; }   求绝对值的过程很简单,当x是正数的时候,函数值就是它本身,x为负数时,函数值就是它的相反数。下面我们来介绍以上代码的含义。其中 double y(double x) 是函数头,也叫函数原型,相当于函数的一个身份证,从左往右,第一个double表示了函数的返回值类型,返回值是我们要通过这个函数得到的值,返回值类型等同数据类型,只不过它还可以是void,空类型,就是说我们不打算通过这个函数得到什么值,只是希望它能帮我们做一些事。括号里的是参数列表,至于如何写参数,例子里已经出现了写法,这里不必赘述。   return 后面的内容,是函数要返回的值,返回值类型一定和return后面返回的值类型相同。至于这个表达式怎么写,写法很多。理论上,只要表达式的值和返回值类型相同。那么这个返回表达式就是合法的