作业
作业1 不同维数数组和指针数组的传参
1 #include <stdio.h>
2
3 void print1(char *ptr)
4 {
5 printf("ptr = %s\n",ptr);
6 }
7 void print2(char (*ktr)[100])
8 {
9 int i=0;
10 for(i=0;i<2;i++)
11 {
12 printf("ktr[%d] = %s\n",i,*(ktr+i));
13 }
14 }
15 void print3(char (*str)[2][100])
16 {
17 int i=0;
18 int j=0;
19 for(i=0;i<2;i++)
20 {
21 for(j=0;j<2;j++)
22 {
23 printf("str[%d][%d] = %s \n",i,j,*(*(str+i)+j));
24 }
25 }
26 }
27 void print4(char **ytr)
28 {
29 int i=0;
30 for(i=0;i<3;i++)
31 {
32 printf("ytr[%d] = %s \n",i,*(ytr+i));
33 }
34 }
35
36 int main()
37 {
38 char ptr[100]="hello";
39 char ktr[2][100]={"hello1","hello2"};
40 char str[2][2][100]={{"hello3","hello4"},{"hello5","hello6"}};
41 char *ytr[3]={"hi1","hi2","hi3"}; //pointer array
42
43 print1(ptr);
44 print2(ktr);
45 print3(str);
46 print4(ytr);
47 return 0;
48 }
结果
[root@localhost 0708]# gcc zuoye.c
[root@localhost 0708]# ./a.out
ptr = hello
ktr[0] = hello1
ktr[1] = hello2
str[0][0] = hello3
str[0][1] = hello4
str[1][0] = hello5
str[1][1] = hello6
ytr[0] = hi1
ytr[1] = hi2
ytr[2] = hi3
作业2 单链表复习
- 链表中的数据是以结点来表示的,每个结点的构成:元素+ 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。单链表是链式存取的结构。
- 单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。链表由头指针唯一确定,单链表可以用头指针的名字来命名。
终端结点无后继,故终端结点的指针域为空,即NULL。
课堂笔记
1.位运算 & | ^ >> << ~
按位与运算对某些位清零或保留某些位 清零与0 保留与1 置位或1 异或取反(同为0,异为1)特定为1
- demo1:输入一个整数 将其转化为32位二进制的表现形式:
- demo2:输入十进制 转化为十六进制
2.编译预处理
-
宏变量
#define MAX 13 提高代码可读性 -
宏函数 #define MAX(a,b) (a) > (b) ? (a) : (b):
-
宏函数和自定义函数的区别:
宏函数:傻瓜式替换 省去函数调用返回的时间,同样省去了给形参分配空间和释放。用编译时间换内存空间和运行时间 -
什么时候用宏函数?:频繁使用并且功能短小简单的函数
-
条件编译
如果重复定义:
法一
#ifndef __ FUNC_H __
#define __ FUNC_H __
………………
#endif
法二
#pragma once
#include “func.h”
Int b=5;
3. 编码规范
- 无关块之间空行
- 四格缩进
- 一行一个变量
- for while 不管多少行都加{ }
- 变量和赋值之间加空格
- …
4.指针
- 指针是什么?是一个变量,保存的是地址,作用:能够直接操作地址(访问硬件)
- 指针类型是根据存储的地址的类型(类型+步长)
- Int *p =&n;p+1 %p取地址 跳4个字节 char 跳一个字节 %x 十六进制
- **是取值运算符 &取地址运算符
- 多维指针作用:保存前一维指针变量的地址
- 指针赋值一定是相同类型
- -万能指针 void* :可以接受任何类型指针的值,不能做取值和运算 自加跳一个字节
- 指针-指针?等于之间有多少个此类型的数据
- 野指针:没有给指针赋值时,会随机给他一个地址,现在新版置为空(零地址),不能直接对他操作 所以应该先分配个空间
ptr = char(*)malloc(sizeof((char)*100)
if(ptr ==NULL)
{
exit(1);//加个判断
}
free(ptr)
ptr=NULL //务必置为空 可能内存泄漏
5.数组
- 一维数组名是指针常量保存数组首元素的地址
- 数组地址:对数组名取地址获得的是整个数组的地址
- *(&a)=a
对一维数组的地址取值等于一维数组首元素的地址 - 数组指针 int (*p)[max] =&a;
- 二维数组名:指针常量 保存一维数组地址
- 一维数组单位是元素,二维数组单位是一维数组
- 指针数组 int *p[3];
int main (int argc ,char *argv[])
{
}