1 strlen函数
计算制定字符串的长度,不包含字符串结束标志符"\0"。也就是计算\0 之前的字符个数
char str[] = "abc\0defg";
int n = strlen(str);
printf("输出为%d\n",n); //输出为3,
2 sizeof函数
sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。
int arr[] = {9,1,2,5,4,7,8,9};
int len = sizeof(arr) / sizeof(arr[0])
3 字符串追加
char str1 = "hello";
char str2 = "world";
char str3[100];
int i = 0;
int j = 0;
while(str1[i] != '\0'){
str3[i] = str1[i];
i++;
}
while(str2[j] != '\0'){
str3[i+j] = str2[j];
j++;
}
4 空指针和野指针
任意数值赋给指针变量没有意义,因为这样的指针就成了野指针
int *p = 10 ; 指向地址为10的内存空间
这种就是野指针,指针变量 p 指向了未知的空间,野指针不会直接引发错误。
空指针:
int* p = NULL; // 指针变量p 指向内存地址编号为0 的空间
5 万能指针
void * 可以指向任意变量的内存空间
可以接受任意类型变量地址
int a = 10;
void* p = &a;
*p = 100; //会报错 需要进行类型转换,现在指针p 是void类型的,需要转成int类型
//(int* )p 对指针p进行类型转换,转成int类型的指针
//正确写法
*(int*)p = 100;
6 const修饰指针
int const a = 10 ; //定义一个常量
int* p = &a;
//通过指针修改a的值
*p = 100;
const 修饰指针的两种情况
- 修饰指针类型,这种情况可以改变指针变量的值,但是无法改变指针指向内存空间的值
int b = 50;
int a = 10;
const int* p = &a;
p = &b; //可以。可以改变变量的值
*p = b //不可以
- 修饰指针变量
int b = 50;
int a = 10;
int* const p = &a;
p = &b; //不可以
*p = b //可以
- 都不可以修改
int a = 10;
const int* const p = &a