二维数组在内存上 也是连续的,并且数组名字是常量不支持++操作;
strlen功能:遇到结尾的\0就结束了,所以最后要把 \0也要复制过去,存放被复制的字符串的空间要足够大,否则会出现越界的情况。
strcmp功能:比较的是第一个不相等的ascii码
指针 : 在内存中每个字节都有一个编号,这个编号就叫做指针
类型的作用是 从首地址开始一共可以操作几个字节的空间
指针的大小:32位系统位4字节 64位系统位8字节
指针只能保存已经分配给你的空间地址,对未分配给你的空间地址进行操作会出现段错误
例如:
int *p = 0x12345678;
*p = 100;
会报段错误,不能手动指定地址。
指针定义时必须初始化,否则会出现野指针;
相同类型的指针做运算才有意义
int s[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int *p = s;
printf("%p\n", s+1); //s是行指针,操作的是一行,所以是5的地址
printf("%d\n", *(p+1));// 指针P是int类型,所以是偏移一个int类型,结果是2
二级指针保存的是一级指针的地址,
int a = 10;
int *p = &a;
int **q = &p;
const 关键字的作用:被修饰的用来只读,不能修改里面的内容;
const *p : 不能通过指针p修改里面的内容,可以改变p的指向
* const p : 不能改变p的指向,可以改变p里面的内容
宏定义 :
#define MAX_LINE 10
#define MAX_ROW 20
#define MINz(a,b) a > b ? a : b;