1、day11作业
使用的代码
#include<stdio.h>
#include<stdlib.h>
int main()
{int i;//申请多大的空间scanf("%d", &i);char* p = (char*)malloc(i);//不进行强制类型转换,会产生警告char c;scanf("%c", &c);//清空上面申请空间时在缓冲区遗留的换行。最好不要使用rewind()清空缓冲区:微软可以使用,gcc不可用(OJ平台是gcc)gets(p);//gets()读取缓冲区中的数据,一直到\n时,不在读取:\n没有读取。puts(p);return 0;
}
2、字符指针与字符数组的初始化
char*p="hello"
:此时p指向的是"hello"这个字符串的首地址,可以利用此指针借助下标,访问字符串中的具体数据:printf("%c",p[0])
char c[10]="hello"
:此时是将字符串"hello"放到这个字符数组中。数组的第一个元素就是该字符串的首字母。
使用的代码:
int main()
{char* p = "hello";char c[10] = "hello";printf("%c\n", p[0]);//正常打印printf("%c\n", c[0]);//正常打印//p[0] = 'H';//不可用指针+下标,修改指针指向的字符串p = "world";//将字符串world的地址赋值给p。任何一个字符串都有起始地址,此处相当于用world的起始地址替换p指针中原来hello字符串的起始地址c = "world";//定义数组时,已经确定了这个数组的地址,存放于数组名中,这个数组的地址不可修改。即c中的值不可修改。此时的数组名相当于一个常量return 0;
}
3、二级指针传递的说明
二级指针就是一级指针取地址后的结果。
一级指针就是普通变量取地址后的结果。
int**p=&pi
*p=pj
指针解引用的具体步骤:
①p是二级指针,二级指针p解引用后,得到内部的地址4000。
②根据此地址,找到对应的空间。
③将该空间内部的数据换为变量pj中的值,也就是将pi中的值换为pj中的值。
总结:根据指针内部的地址,找到对应空间,改变该空间中的值。
4、函数的说明
a.多个文件的的执行流程:
先进行编译:
func.c变为func.obj
源.c变为源.c
再进行链接:
将func.obj和源.obj链接形成:1-函数的嵌套调用.exe
b.没有函数声明时,函数默认返回整数类型。
c.定义函数时,形参只在调用调用函数时才占用内存单元。
文件结构
使用的代码
func.h文件:
#include<stdio.h>
int printstar(int i);//函数的声明:返回值+函数名+形参类型和形参+分号
void print_message();
func.c文件c
#include"func.h"
//printstar函数的定义
int printstar(int i)
{
printf("*************************\n");printf("printstar %d\n", i);return i + 3;
}
//print_message函数的定义
void print_message()
{printf("how do you do\n");printstar(3);
}
源.c文件
#include"funcc.h"//自己写的头文件需要用""引起。双引号的头文件:表示在源.c文件会在自身处的文件夹下搜索需要的头文件func.h:即源.c和func.h必须在同一个文件夹下
//当代码处于不同文件下时,需要使用其他文件中的函数时,要在头文件中包含对该函数的声明。若是没有声明函数,则会提示该函数没有定义(国内说法)
//函数未声明亦可调用的原因:微软的VS中,若是没有声明函数,则其会在源文件中搜寻需要的函数,进而实现调用
//strcpy没有头文件也可运行的原因:此函数的实现是在C库中,而头文件中只是声明
int main()
{int a = 10;a = printstar(a);//printstar函数的调用print_message();//print_message函数的调用printstar(a);return 0;
}
5、全局变量
使用的代码
int i = 10;//全局变量,再函数外定义的变量称为全局变量。全局变量放在数据区中
void print(int a)
{printf("print i=%d\n", i);//此处的i=5
}
int main()
{printf("main i=%d\n", i);//此处的i=10i = 5;//此处的i和数据区中的i是同一个int i = 5;//此处的i是放在栈空间中的局部变量print(i);//全局变量和局部变量同名时,遵循就近原则:远近看的是调用时的距离,而不是和执行函数的距离return 0;
}
6、递归调用
概念:函数在自身的函数体内部调用自己:这种函数称为递归函数
递归是有限的,一定要找时间,多刷点题目
使用的代码
int f(int n)
{cif (1 == n){return 1;//第二步写结束条件}return n * f(n - 1);//第一步写好公式
}
int main()
{int n = 5;int result = f(n);printf("%d\n", result);return 0;
}
参考视频
链接:https://pan.baidu.com/s/1cl5q51gC3wHEmAhOjVoUYA?pwd=tdoo
提取码:tdoo