目录
2.1 指针强化
强化1:指针是一种数据类型
1)指针变量也是一种变量,占有内存空间,用来保存内存地址测试指针变量占有内存空间大小。
2)保证所指的内存块能修改
3)指针是一种数据类型,是指它指向的内存空间的数据类型 。
4 ) 不允许向NULL和未知非法地址拷贝内存。
char *p3 = NULL;
//给p3指向的内存区域拷贝内存
strcpy(p3, "1111"); //err
char *p3 = 0x0001;
//给p3指向的内存区域拷贝内存
strcpy(p3, "1111"); //err
强化2:间接赋值(*p)是指针存在的最大意义
强化3:理解指针必须和内存四区概念相结合
强化4:应用指针必须和函数调用相结合(指针做函数参数)
值得一看:
用1级指针形参,去间接修改了0级指针(实参)的值。
用2级指针形参,去间接修改了1级指针(实参)的值。
用3级指针形参,去间接修改了2级指针(实参)的值。
用n级指针形参,去间接修改了n-1级指针(实参)的值。
#include <stdio.h>
void fun(char **p , int *len)
{
if (p == NULL)
{
return;
}
char *tmp = (char *)malloc(100);
if (tmp == NULL)
{
return;
}
strcpy(tmp, "adlsgjldsk");
//间接赋值
*p = tmp;
*len = strlen(tmp);
}
int main(void)
{
char *p1 = NULL;
int len1 = 0;
fun(&p1, &len1);
if (p1 != NULL)
{
printf("p1 = %s, len1 = %d\n", p1, len1);
}
printf("\n");
system("pause");
return 0;
}
① 程序运行至 char *tmp = (char *)malloc(100);
② 程序运行至 strcpy(tmp, "adlsgjldsk");
③ 程序运行至 *p = tmp;
④ 程序运行至 *len = strlen(tmp);
2.2 一级指针(char*)易错地方
2.2.1 对空字符串和非法字符串的判断
void copy_str(char *from, char *to)
{
if (*from == '\0' || *to == '\0') // 正确的为 if (from == '\0' || to == '\0') 地址是否为空