C语言基础01-函数


函数(本身有代码,链接时程序执行先将函数参数入栈,再运行函数代码)

1.参数(形参/实参)

(1)形参

实参在主调函数中定义与使用(进入被调函数后,实参变量不能使用)

实参可以是常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。

如调用输出函数时,格式化字符串嵌入的变量必须有值。


调用函数时:
①为函数的形参分配地址
②将实参的值 赋值给形参
③函数结束,释放形参地址


(2)实参

①定义/声明实参时,分配地址
②实参赋值
③调用函数,将实参值传给形参

2.传值与传址调用

传值调用和引用调用指的是用于参数传递过程中的一种机制。

传值调用:只使用实参的值。

传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。


引用调用:

将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。

传址调用(C和C++):参数为数组时是传址

核心:把实参地址传进去,然后用*运算取地址的内容

1.实参
①定义/声明实参时,分配地址
②实参赋值
③调用函数,将实参地址传给形参

2.形参(指针变量)
函数调用时
①为函数的形参(指针变量)分配地址
②将实参的地址 赋值给形参(指针变量)
→指针变量(形参)指向实参的存储位置
→在被调函数中若改变形参的值,也就改变了原来变量的数值。
③函数结束,释放形参地址

void swap(int *p, int *t){}
//指针p赋值&a ⇒指针p指向a

int p,t;
swap(&p,&t)传地址

总结⇒传址/引用(换名),都是为了使形参指向实参实际的内存地址。


引用(别名)传参(C++)

变量引用&

(1)概念
引用一个现有的变量声明一个引用(别名)变量

引用(别名)变量与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储单元

(2)初始化
声明引用时必须指定它代表的是哪一个变量,即对它初始化。
int b;
int &a=b; //声明a是变量b的引用

实参
int n=10;
add(n);

void add10(int &a)
{
a=a+10;
}


int main(int argc, char** argv);

argc表示参数的个数,argv里边存储各个参数
;第二个参数中argv[0]为自身运行目录路径和程序名,argv[1]指向第一个参数、argv[2]指向第二个参数

#include <stdio.h>
int main(int argc, char *argv[ ])
{
printf("%s\n",argv[0]);
return 0;
}

主函数main并非程序的真正入口!
在编译器对你的工程文件进行编译时,它是先找到你的main函数,然后根据main函数类型,把一段前缀入口程序预先编译,再让它去调用main函数.当你的main函数需要参数时,它就编译有参数main函数调用,反之则编译无参数main函数调用.
所以编译器是自动识别你的main函数类型的!

void main无返回值,部分编译器可以通过。

默认库

输出:int fprintf ( FILE *fp, char * format, … );

函数声明:int printf(const char *format, ...)
函数调用:printf("<格式化字符串>", <参量表>);

format – 字符串(或字符数组指针),包含了要被写入到标准输出 stdout 的文本。
它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化 。

    转换说明符:
  %c 字符   %s 字符串
      %d 、%i        有符号十进制整数 %4d 四个为单位,右对齐
      %u             无符号十进制整数
      %f             浮点数(包括float和doulbe,默认保留六位小数,%.6f)
      %o   八进制整数     %x  十六进制整数
      %p   指针

输入:int fscanf ( FILE *fp, char * format, … );

scanf("%d",&n);
把接收到的数据存入到整形变量n的内存中,
如果变量为数组或者指针,则不需要&



输入、输出:putchar()、puts()、gets()、getc()

putchar():输出字符数据,puts()输出字符串数据。

gets()、getc()

文件流:fgetc()、fpuc()

读文件到内存

int fgetc(fp) :从fp所指的文件中获取下一个字符,出错返回EOF,否则返回所读的字符。

int fputc(int char, FILE *stream);

char *fgets(char *buf, int bufsize, fp);
*buf: 字符型指针,指向用来存储所得数据的地址。bufsize: 整型数据,指明存储数据的大小。

fpintg(fp,’’%?",变量名)

#include <stdio.h>
int main()
{
    FILE *fp; //文件流。
if((fp=fopen("test.txt","r"))==NULL)
    printf("%s","错误");
//char c;
//while((c=fgetc(fp))!=EOF)
  //  printf("%c",c);

char f[10];
fgets(f,10,fp);
puts(f);

fclose(fp);
        return 0;
}

字符串相关

获取字符串长度 strlen():
size_t strlen(char const* str):size_t也就是无符号整数
计算指定字符串 str 的长度,但不包括结束字符(即 null 字符:’\0’)


其他:

LT小于 :LE小于等于 GT大于 GE大于等于 EQ等于 NE不等于


math.h

sqrt():计算非负实数的平方根

abs(int x);求整数x的绝对值
fabs(double x);求浮点数x的绝对值.

pow(a,n):a的n次方,a和n还有返回结果都是double类型



string.h

strcpy(新,旧):复制字符串的,接受两个参数,一个是被复制字符串,另一个新字符串


strcmp(str1,str2)
string compare(字符串比较),用于比较两个字符串并根据比较结果返回整数。

两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止

当s1<s2时,返回为负数;
当s1=s2时,返回值= 0;
当s1>s2时,返回正数。



stdlib.h

malloc/realloc/free 申请、释放内存:

malloc分配指定大小的内存
void * malloc(long NumBytes):分配NumBytes个字节,并返回指向该内存的指针。分配失败返回一个空指针。


realloc 是在原有的基础上在开辟若干空间

指针名=(Elemtype *)realloc(原指针名,新大小)
①先释放原来指针 所指内存区域
②按照新大小重新分配空间
③将原有数据从头到尾拷贝到新分配的内存区域
④并返回该内存区域的首地址。即重新分配存储器块。

void free(void *ptr):C语言中释放内存空间的函数.

通常与申请内存空间的函数malloc()结合使用,可以释放由 malloc()、calloc()、realloc() 等函数申请的内存空间。




(Elemtype *) ;可将malloc返回的类型(void * )
 强制转换为(Elemtype *)类型

用法:指令名=(Elemtype )malloc( nsizeof(Elemtype))

指针名 ⇔ 指针 指向内存的首地址(如数组指针的基地址)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值