初始化对比
//指针形式
const char* head="I love cat!";
//字符数组形式
char heart[]="I love cat!";
heart是一个地址常量,head是一个变量,二者都可以使用下标法,heart[0]->'I',head[0]->'I'
初始化字符数组和初始化化指针在内存处理方面是不一样的:
对于字符数组,等号(=)右边的"字符串"保存在静态内存中,在代码执行时,字符数组才被分配内存,即动态存储。初始化时,系统从静态内存区将字符串拷给字符数组。
对于指针,等号(=)右边的"字符串"同样也是保存在静态内存中,初始化时只是将"字符串"的内存地址拷给了指针
char fruit1[3][7]={"apple","pear","orange"};
const char* fruit2[3]={"apple","pear","orange"};
存储方式对比
数组: 指针:
'a', 'p' ,'p', 'l', 'e' ,'\0', '\0' 'a', 'p' ,'p', 'l', 'e' ,'\0'
'p', 'e', 'a' ,'r', '\0', '\0' ,'\0' 'p', 'e', 'a' ,'r', '\0'
'o' ,'r' ,'a' ,'n', 'g', 'e', '\0' 'o' ,'r' ,'a' ,'n', 'g', 'e', '\0'
使用方法对比
//指针形式
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
const char* p="A pointer was initialized to me.";
printf("%s\n",p); //从第一个字符开始输出
printf("%s\n",p+4); //从第五个字符开始输出
printf("%c\n",p[4]); //输出第五个字符
getchar();
return 0;
}
运行结果:
捕获.PNG
//数组形式
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
char str[50]="An array was initialized to me.";
puts(str); //str即&str[0],从第一个字符开始输出
puts(&str[5]); //从第六个字符开始输出
printf("%c",str[5]); //输出第六个字符
getchar();
return 0;
}
运行结果:
捕获2.PNG
网友评论