扩展
1.指针变量和它指向的内存块是两个不同的概念
指针(本身也有东西)~内容
点击查看代码
注意
//写内存时,一定要确保内存可写
char *buf2 = "sadgkdsjlgjlsdk"; //文字常量区,内存不可改
//buf2[2] = '1'; //err
char buf3[] = "skgjkdsjgjds";
buf3[1] = '1'; //ok
char *p3 = NULL;
//给p3指向的内存区域拷贝内存
p3 = buf3;
strcpy(p3, "1111"); //OK
实参
形参
4.指针做参数输入输出特性
输入 主调函数分配内存
输出 输出,被调用函数分配内存,地址传递
点击查看代码
void fun3(char **p /* out */, int *len)
{
if (p == NULL)
{
return;
}
char *tmp = (char *)malloc(100);
if (tmp == NULL)
{
return;
}
strcpy(tmp, "adlsgjldsk");
//间接赋值
*p = tmp;
*len = strlen(tmp);
}
//输入,主调函数分配内存
char buf[100] = { 0 };
fun(buf);
printf("buf = %s\n", buf);
char *str = NULL;
fun2(str);
//输出,被调用函数分配内存,地址传递
char *p = NULL;
int len = 0;
fun3(&p, &len);
if (p != NULL)
{
printf("p = %s, len = %d\n", p, len);
}
char buf[] = { 'a', 'b', 'c' };
2.指定长度,后面没有赋值的元素,自动补0
char buf2[100] = { 'a', 'b', 'c' };
3.这里的0=\0 转义字符
char buf6[50] = { '1', 'a', 'b', 0, '7' };
4.长度计算
//strlen: 测字符串长度,不包含数字0,字符'\0'
//sizeof:测数组长度,包含数字0,字符'\0'