c语言函数

memset函数及其用法,C语言memset函数详解

被刻印的时光 ゝ 提交于 2019-11-27 10:44:08
在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。 每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为: # include <string.h> void *memset(void *s, int c, unsigned long n); 函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。 memset() 的作用是在一段内存块中填充某个给定的值。因为它只能填充一个值,所以该函数的初始化为原始初始化,无法将变量初始化为程序中需要的数据。用memset初始化完后,后面程序中再向该内存空间中存放需要的数据。 memset 一般使用“0”初始化内存单元,而且通常是给数组或结构体进行初始化。一般的变量如 char、int、float、double 等类型的变量直接初始化即可,没有必要用 memset。如果用 memset 的话反而显得麻烦。 当然,数组也可以直接进行初始化,但

C语言 函数的简介

99封情书 提交于 2019-11-27 08:31:05
函数: 函数是C语言中管理代码的最小单位,命名空间独立,栈空间独立。 函数被调用时开辟栈内存,函数结束后释放栈内存。 声明:返回值 函数名(类型1,类型2,…); 定义:返回值 函数名(类型1 参数名1,类型2 参数名2,…) { 函数体 } 注意:函数的定义如果出现调用之前,声明可以忽略。调用函数时如果没有找到函数声明,也没有定义,编译器也不报错,而是先猜测函数的格式,链接时再尝试寻找函数的定义。 return 语句只是把数据存储一个特定的位置,当函数运行结束后,调用者就可以从这个位置获取到返回值。 函数有返回值(格式),而没写return语句,调用者会得到一个不确定返回值。 常见编译错误: 隐式声明函数‘sqrt’,没有找到函数声明和定义,编译时错误。 undefined reference to `sqrt’,有函数声明,但无函数定义,链接时错误。 函数本质:函数就存储在代码段中的一段数据(二进制指令的集合),函数名就是这段数据的开始位置。 因此函数名就是地址,可以定义指向这段数据的指针变量,这种指针叫函数指针。 返回值 (*函数指针) (类型1,类型2,…) ; 函数的传参: 1、只能值传递(内存拷贝),使用指针可提高效率(const int *)。 2、函数之间共享变量,全局变量(尽量少用),指针(注意安全)。 3、数组当作函数的参数时就脱变成了指针(长度丢失)

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

不想你离开。 提交于 2019-11-27 08:23:33
C函数 函数是一组一起执行一个任务的语句。每个C程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。 可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由自己决定的,但是在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。 函数 声明 告诉编译器函数的名称、返回类型和参数。函数 定义 提供了函数的实际主体。 C标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来赋值内存到另一个位置。 函数还有很多叫法,比如方法、子例程或程序,等等。 定义函数 C语言中的函数定义的一般形式如下: return_type function_name(parameter list) { body of the function } 在C语言中,函数由一个函数偷和一个函数主体组成。下面列出一个函数的所有组成部分: 返回类型: 一个函数可以返回一个值。 return_type 是函数返回的值的数据类型。有些函数指向性所需的操作而不返回值,在这种情况下,return_type是关键字 void 。 函数名称: 这是函数的实际名称。函数名和参数列表一起构成了函数签名。 参数: 参数就像是占位符。当函数被调用时可以向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量

Java简单调用C语言函数

余生长醉 提交于 2019-11-27 07:55:59
Java简单调用C语言函数 1.安装Dev-Cpp 2.编写并编译Java代码 3.新建工程 4.修改C代码 4.1将第2步生成的.h文件复制黏贴到dll.h里面 4.2修改dllmain.cpp文件 4.3 保存并编译 4.4编译错误解决 5.将编译好的dll文件放到java安装目录下的bin目录下 6.运行 1.安装Dev-Cpp 2.编写并编译Java代码 public class HelloCDemo { native void printHelloC ( ) ; static { System . loadLibrary ( "java2c" ) ; } public static void main ( String args [ ] ) { HelloCDemo demo = new HelloCDemo ( ) ; demo . printHelloC ( ) ; } } javac编译java文件 javah生成.h文件 打开.h文件 * * /* DO NOT EDIT THIS FILE - it is machine generated */ # include <jni.h> /* Header for class HelloCDemo */ # ifndef _Included_HelloCDemo # define _Included

C语言传递方式调用函数

孤街浪徒 提交于 2019-11-27 07:40:31
传值方式调用函数 向函数传递参数的传值调用方法,把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。 默认情况下,C 语言使用传值调用方法来传递参数。一般来说,这意味着函数内的代码不会改变用于调用函数的实际参数。函数 swap() 定义如下: /* 函数定义 */ void swap ( int x , int y ) { int temp ; temp = x ; /* 保存 x 的值 */ x = y ; /* 把 y 赋值给 x */ y = temp ; /* 把 temp 赋值给 y */ return ; } 现在我们在主函数里面调用swap函数看结果: #include < stdio . h > /* 函数声明 */ void swap ( int x , int y ) ; int main ( ) { /* 局部变量定义 */ int a = 100 ; int b = 200 ; printf ( "交换前,a 的值: %d\n" , a ) ; printf ( "交换前,b 的值: %d\n" , b ) ; /* 调用函数来交换值 */ swap ( a , b ) ; printf ( "交换后,a 的值: %d\n" , a ) ; printf ( "交换后,b 的值: %d\n" , b ) ; return

C语言引用方式调用函数

岁酱吖の 提交于 2019-11-27 07:39:57
引用方式调用函数 通过引用传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。 传递指针可以让多个函数访问指针所引用的对象,而不用把对象声明为全局可访问。 /* 函数定义 */ void swap ( int * x , int * y ) { int temp ; temp = * x ; /* 保存地址 x 的值 */ * x = * y ; /* 把 y 赋值给 x */ * y = temp ; /* 把 temp 赋值给 y */ return ; } 在主函数里面用引用传值来调用函数 swap(): #include < stdio . h > /* 函数声明 */ void swap ( int * x , int * y ) ; int main ( ) { /* 局部变量定义 */ int a = 100 ; int b = 200 ; printf ( "交换前,a 的值: %d\n" , a ) ; printf ( "交换前,b 的值: %d\n" , b ) ; /* 调用函数来交换值 * &a 表示指向 a 的指针,即变量 a 的地址 * &b 表示指向 b 的指针,即变量 b 的地址 */ swap ( & a , & b ) ; printf ( "交换后,a 的值: %d\n" , a ) ; printf (

LNK2019 无法解析的外部符号 该符号在函数 _main 中被引用

霸气de小男生 提交于 2019-11-27 04:41:38
学习严蔚敏的数据结构,使用vc6新建项目,文件名分别如下: SequenceStack.cpp SequenceStack.h Status.h TestCase.c 报错如下: xilink6: executing 'D:\PROGRA~2\vc6.0\VC98\Bin\link.exe' TestCase.obj : error LNK2001: unresolved external symbol _InitStack_Sq Debug/03_01_SequenceStack.exe : fatal error LNK1120: 1 unresolved externals 代码一切都是正确的。后来发现原因, 文件名引起,把TestCase.c改成TestCase.cpp就好了 因为cpp默认使用c++,c使用asni c,猜想应该是c++和c的cdecl(c语言调用约定)导出函数申明方式不一致,例如c++导出函数???@xyz@Init,c却找不到。 来源: https://www.cnblogs.com/passedbylove/p/11343654.html

[转] C语言的标准(K&R C, ANSI C, C89, C90, C99)

夙愿已清 提交于 2019-11-26 19:15:20
最近在学习C语言,喜欢对某一个问题进行深究,然后就晕了,C语言的各种规则也真是多,麻烦事也多。 比方,一直在VS2010平台上学习, 变量的声明就必须在执行语句的前面,否则就报错。但是以前在编写C++程序时,好像都是随意的。有点迷糊, 百度了一下,发现很多人提到C89 和 C99……由于C89(也就是C90)是目前广泛使用并完全支持的,C99目前支持的还不太全面, 所以还是将变量的声明放在执行语句前面比较妥。(20130906) 以下部分均转自网上 ———————————————————————————————————— C语言的标准(K&R C, ANSI C, C89, C90, C99) 0、C语言,1973年由Dennis M. Ritchie设计和实现。 1、 K&R C 。1978年由Kernighan和Ritchie合写的书《The C Programming Language》,形成了C语言的事实的标准,简称为K&R C。 2、 ANSI C ( C89 或 C90 )。1989年,美国国家标准局(ANSI)颁布了第一个官方的C语言标准(X3.159-1989),简称为ANSI C或C89;1990年,它被国际标准化组织(ISO)采纳国际标准(ISO/IEC9899:1990),简称为C90。 这个标准是目前广泛使用并完全支持的。 3、 C99 。199年,ISO

C语言字符串操作函数总结

℡╲_俬逩灬. 提交于 2019-11-26 18:07:53
转载来源: https://blog.csdn.net/qq_33757398/article/details/81212618 字符串相关操作头文件: string.h 1.strcpy函数 原型: strcpy(str1,str2) ; 功能:将字符串str2 复制 到字符串str1中,并覆盖str1原始字符串,可以用来为字符串变量赋值 返回:str1 注意:   1)字符串str2会覆盖str1中的全部字符,   2)字符串str2的长度不能超过str1,   3) 拷贝原理:从首元素开始,遇到\0结束 int main(int argc, char const *argv[]) { char *str1 = "hello world"; char *str2; // 功能:把str1的内容拷贝到str2,参数为字符数组指针 strcpy(str2, str1); printf("str2 = %s\n", str2); char str3[15] = "hello\0 world"; char str4[15]; //拷贝原理:从首元素开始,遇到\0结束 strcpy(str4, str3); printf("str4 = %s\n", str4); return 0; } 输出 str2 = hello world str4 = hello 2.strncpy函数 原型:

【学习笔记,C语言】华为C语言编程规范学习笔记

三世轮回 提交于 2019-11-26 15:48:54
函数: 一个函数仅完成一项功能。 重复代码尽可能提炼成函数 避免函数过长,新增函数不超过50行 代码块嵌套不超过4层 对参数的合法性检查有调用者还是接口函数负责,应在项目组规定好 对函数的错误码要全面处理 设计高扇入,低扇出的函数(小于7) 废弃代码及时清除 函数不变参数使用const 建议:避免使用全局变量,静态局部变量和IO操作 检查非参数输入的有效性 函数的参数不超过5个 除打印类函数外,不要使用变长函数 建议2.6 :在源文件范围内声明和定义的所有函数,除非外部可见,否则应该添加static关键字 标识符命名规则 原则: 标识符的命名要清晰明了,有明确含义 除了常见缩写外,不使用单词缩写,不适用汉语拼音。 规则: 保持统一命名风格 建议: 用正确的反义词组 避免名字中出现数字编号 标识符不应添加模块名 文件名: 文件名使用小写字符 变量命名: 规则: 全局变量添加 g_ 静态变量添加s_ 禁止使用单字节变量,除非循环变量i,j,k 建议: 不建议使用匈牙利命名法 使用形容词+名词方式命名变量 函数命名规则: 动词+名词的方式 宏命名规则: 数值,字符串:全大写字母,下划线分割 除特殊标识定义,避免使用_开头 排版 规则: 缩减为4个空格 相对独立的程序块之间,变量说明之后必须加空行 一条语句不能过长 多个短语句不允许写在同一行 if,do,while,for,case