c指针和字符数组初学者比较好的例子

发布时间:2024年01月18日

?本练习的主题:一个对象的指针可以修改这个对象的内容;

注:对象是指一个固定大小的内存块。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int getMem(char **p1,int *mylen1,char **p2,int *len2)
{
	int ret = 0;

	char *tmp1 = (char *)malloc(100);
	strcpy(tmp1,"aabbccdd");
	*mylen1 = strlen(tmp1);
	*p1 = tmp1;

	char *tmp2 = (char *)malloc(100);
	strcpy(tmp2,"1122334455");
	*len2 = strlen(tmp2);
	*p2 = tmp2;
	
	return ret;

}

int main(void)
{ 
	char *p1 =NULL;
	char *p2 =NULL;
	int len1 = 0;
	int len2 = 0;
	getMem(&p1,&len1,&p2,&len2);
	
	printf("str1:%s,len 1:%d\n",p1,len1);
	printf("str2:%s,len 2:%d\n",p2,len2);

	if (p1 != NULL)
	{
		free(p1);
		p1 = NULL;
	}

	if (p2 != NULL)
	{
		free(p2);
		p2 = NULL;
	}

	   	 
	return 0;
}

指针的例子2:

int main(void)
{
	char from[128];
    //情况1:也可以写成 char to[128] = {0};  数组的每个元素都定义为0了
    //情况2:也可以写成 char to[128] = {'\0'};  数组的每个元素都初始化为'\0'了
    //情况2和情况1实际上是等价的,即效果相同。效果就是每个字符都初始化为空字符'\0'了。

	char to[128];
	strcpy(from,"112223345kjjnmasldf");
	char *p1 = from;
	char *p2 = to;
	while (*p1 != '\0')
	{
		*p2++ = *p1++;	
	}
	*p2 = '\0';
	printf("%s",to);
	return 0;
}

注:(1)'\0'按照字符打印(也就是"%c")格式输出时候什么也不输出,也就是空字符。

(2)'\0'按照整数打印(“也就是printf中使用%d格式打印”)格式输出是0,因为空字符的ASCII码是0,字符和整数的关系密切。千万要理解。

例如 char buf[100] = {'a','b','c','d'};那么其余没定义的字符,编译器全部定义为空字符了。

printf("%d",buf[80]);结果是1.

printf("%c",buf[80]);结果是什么也不显示,也就是空字符。

看一个字符数组的例子:

#include <stdio.h>
#include <string.h>
int main()
{
	char buf[100] = {'a','b','c','d'};
	char buf1[100] = "abcd";
	printf("buf:%s",buf);
	
	if (buf[4] == '\0')
		printf("yes ,buf[4]是一个空字符.\n");
	else
		printf("No,buf[4]不是一个空字符.\n");
	if (buf[4] == buf1[4])
	{
		printf("yes,buf[4] == buf1[4],都是一个空字符\n");
	}

	int ret = strcmp(buf,buf1);
	printf(ret == 0?"对于strcmp,buf和buf1是相等的":"对于strcmp,buf和buf1是不相等的.\n");
	return 0;
}

运行结果:

继续来个来个例子:

下面是网上找的一个(内存四区)图:

文章来源:https://blog.csdn.net/digitalkee/article/details/135682502
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。