程序员

指针与数组区别

2018-09-15  本文已影响5人  平凡的鱼仔

初始化对比

//指针形式
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
上一篇下一篇

猜你喜欢

热点阅读