作业分析讲解
================
1. 暴露出来的问题:
认真复习--》关注上课说到的一些关键点
p是指针,*p就是普通变量 ---》观点是错误的(数组指针中大把这样的例子)
二级指针(多级指针)
===================
1. 定义: 类型名 **指针的名字
比如: int **p; //定义了int类型的二级指针
注意:你定义的二级指针,它的类型必须跟一级指针类型一致
作用:用来指向另外一个一级指针在内存当中的地址(指向指针的指针)
总结:二级指针在使用的时候无非就两种情况
**q
*q 二级指针解引用一次和两次分别代表什么??这个搞清楚代码就不会写错
int s = 10; int *p = &s; int **q = &p;
printf("%p\n", &s); printf("%p\n", *q); //二级指针解引用一次表示一级指针里面存放的地址 printf("%d\n", **q);//二级指针解引用两次表示一级指针所指向地址的值
|
练习:
1. char buf[3][10]={"hello","hehe","haha"};
char *p=buf[0];
char **q=&p;
//通过q访问二维数组中的三个字符串 %s
//通过q访问二维数组中的单个字符%c
C语言中的函数
=================================
1. 函数的概念和作用:
数学当中:函数就是别人提供给你公式方法 sin() cos()
C语言中:为了提高代码的复用性,把一些功能封装成函数供开发人员使用
printf() --》函数 strcmp() strcpy()
2. 函数的定义
函数的定义都是写在main函数的外面
返回值类型 函数名(形参列表) //函数头
{
函数体;
}
返回值: 告诉函数的调用者,我这个函数执行完毕之后的结果
函数名: 变量名规则一样,通俗易懂,不能跟C语言的关键字以及C语言的函数名字冲突
形参列表:告诉程序员,在使用这个函数的使用需要传递多少个实参,每个实参分别是什么类型
实参(实际参数):函数调用的使用,传递的参数就是实参
形参(形式参数):函数定义的时候出现在圆括号里面的都是形参
函数的调用
语法格式: 函数名(实参列表) //实参的个数,类型必须跟形参保存一致
3. 函数定义需要注意的问题
第一个: 函数的定义要么写在main函数的前面,要么写在main函数的后面(注意提前声明)
第二个:实参和形参的关系一定要搞清楚
C语言中函数调用传递参数只有两种写法: 传值和传地址
区分传值和传地址: 函数的形参是普通变量 --》传值
函数的形参是指针--》传地址
传值:实参把自己的值拷贝一份给形参
传地址:实参把自己的地址赋值给形参指针
第三个:数组作为实参和形参
数组作为实参: 传递的地址(指针)
数组作为形参: 要么写成指针的形式,或者写成 数组+n(n表示元素个数)
第四个:局部变量和全局变量--》作用域
全局变量: 定义在main函数外面以及其他函数的外面
全局变量在定义的.c文件中任何函数都能使用,并且其他.c文件也能使用
全局变量是所有函数共享的,作用域属于整个文件
局部变量: 定义在某个函数的花括号里面的,作用域仅限于函数内部
作用域(作用区域):指的是这个变量的使用范围
需要注意的问题:
第一个: 全局变量跟局部变量同名,优先使用自己定义的局部变量(全局变量不起作用了)
练习:
任意一天的作业,把写的代码功能封装成函数
封装一个函数,把用户从键盘输入的任意一个字符串中的非英文字符去除
封装一个函数,实现求n个整数的最大值,n作为参数传递
int getmax(int a[],int n)
int getmax(int *p)
作业:
第一题: 明确指出每个num是全局还是局部,值是多少,不要编译运行
#include <stdio.h>
int num=100; //全局变量
int fun(int num) //任何函数的形参都是局部变量,跟全局变量同名
{
num+=5; //fun自己的形参num 87
printf("num在fun函数中被修改了%d\n",num); //fun自己的形参num 87
return num; //fun自己的形参num 87
}
int main()
{
//到目前为止main没有定义自己的num
num-=18; //全局变量num==82
fun(num); //函数调用
printf("main函数中使用num %d\n",num); // 全局变量num==82
int num=888;//main自己局部变量
fun(num); //main自己的num
printf("调用fun之后,main函数中使用num %d\n",num); //main自己的num
}
第二题:请问程序执行结果是多少??
难点:知识点 数组作为形参--》理解为指针,传地址
指针的运算,写法 ++b很好理解 b[1][1]的理解
第三题: 封装一个函数 int fun(int n) 该函数可以把1到n之间(1<= 数字 <=n)所有能被6整除的数,或者数字中包含6的全部找到并打印出来
for(i=1; i<=n; i++)
{
if(%6==0)
printf();
//求出i的各个位,判断各个位是否等于6
}