字符串与字符数组{
字符数组: char a[7] = {'h', 'j' , 'i', 'i', 'o', 'y', '\0'};
字符串:{
char a[7] = {"hjiioy"}; == a[7] = "hjiioy"; == a[] = "hjiioy";
char a[4][5] = {"hel", "kil" ,"ijh", "yhg"}; char b[2][3] = {{"hu"}, {"yu"}};
char a[][6] = {"hello" , "money", {'w', 'o','r', 'l','d','\0'}};
}
字符串函数{
strlen(): 求字符串长度. 以'\0'为一个结束标志.
strcpy(): 字符串复制. strcpy(str1, str2);
strcat(): 字符串链接. strcat(str1, str2);
strcmp(): 字符串的比较. strcmp(str1, str2); 返回值: 1 , 0 ,-1
1: 代表str1比str2大 (从第一个字符开始依次比较(比较的是ascii码))
0: 代表两个字符串相等
-1: 代表str2比str1大
}
}
指针(C语言的灵魂)
{
指针就是地址
地址{
每一个字节都有对应的一个编号,这个编号就是地址.
}
指针与指针变量{
指针:一个变量的地址
指针变量:
定义方式: <存储类型> <数据类型> *指针变量名; 例: auto int *p;
本质上是一个变量.特殊在于指针变量专门用来存放变量的地址.
&: 取地址符 *: 取地址内容. 互为逆运算. %p: 打印地址
int a=12; int *p = &a; *(&a) = a = *p
注意: 1.指针数据类型必须要与它指向的数据的数据类型相匹配.
2.明确指针的一个指向. 没有指向的指针通常叫做野指针. int *p = NULL;
}
指针的运算{
int *p; int *q;
p+n: 往高地址方向移动n个数据, 实际地址偏移 = 原地址 + n*sizeof(int);
p-n: 往低地址方向移动n个数据, 实际地址偏移 = 原地址 - n*sizeof(int);
两指针相减: q - p : 不代表地址量,而是代表两个地址之间相隔的数据个数. 内部计算方式 : (q - p)/sizeof(int);
注意: 两个指针一定要是相同的数据类型.
关系运算:> , < 比较存放地址的大小。 if(p > q) 不同数据类型比较没有意义.
赋值运算: int a, *p=&a, *q; q = p;
与一维数组{
int a[6]; int *p = &a[0];
}
}
}
void型与const类型指针{
void *p ; 可以存放任何类型的地址. 但是在使用的时候必须进行强转. char ch ; void *p= &ch; *(char*)p;
const{
const修饰普通变量. 把变量常量化(变成只读变量).
const修饰指针:1. const int *p: 不能通过*p间接改变变量的值(但是可以通过变量名直接改变),p的指向可以变化.
2. int * const p: 能通过*p间接改变变量的值(但是可以通过变量名直接改变), p的指向不可以变化.
3. const int * const p: 不能通过*p间接改变变量的值(但是可以通过变量名直接改变), p的指向也不可以变化.
}
}