题目一:请分析下面代码的结果。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
int main()
{
char *p1 = "China";
char *p2 = NULL;
p2 = (char*)malloc(20);
memset(p2,0,20);
while(*p2++ = *p1++);
printf("%s\n",p2);
return 0;
}
解答:
输出为空。上题的本意是将字符串"China"复制到p2所指向的内存区域,然后打印p2所指向的字符串。但是结果是什么也没有复制,是因为p1和p2同时自增,当复制完p1的字符串的时候,p2也指向了"China"字符串的下一个地址处。故内容为空。在ASCII码中0代表'\0'。
题目2:请问在printf函数中采用什么样的形式打印变量内存的地址?
解答:这是c语言中常用的一项基本知识,最常用的地址打印方式是%p和0x%x两种。见下面的代码:
#include<stdio.h>
int main()
{
int a;
printf("%p\n",&a);
printf("0x%x\n",&a);
return 0;
}
程序执行的结果是:
在编程中通常使用的是0x%x的形式进行打印。