陕西网站seo湛江企业网站建站模板
本练习的主题:一个对象的指针可以修改这个对象的内容;
注:对象是指一个固定大小的内存块。
#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");elseprintf("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;
}
运行结果:

继续来个来个例子:

