3.3 C提高 指针 字符串

扩展

1.指针变量和它指向的内存块是两个不同的概念
image
指针(本身也有东西)~内容

点击查看代码
注意
//写内存时,一定要确保内存可写
	char *buf2 = "sadgkdsjlgjlsdk"; //文字常量区,内存不可改
	//buf2[2] = '1'; //err

	char buf3[] = "skgjkdsjgjds";
	buf3[1] = '1'; //ok

	char *p3 = NULL;
	//给p3指向的内存区域拷贝内存
	p3 = buf3;
	strcpy(p3, "1111"); //OK
2 不断改变指针指向

实参
image
形参

image

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);
	}

5.字符串的初始化 1.不指定长度, 没有0结束符,有多少个元素就有多长
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'

posted @ 2023-03-03 15:46  逆向狗  阅读(23)  评论(0)    收藏  举报