浅谈数组与指针表示字符串的区别

来源:互联网 发布:区域生长算法详解 编辑:程序博客网 时间:2024/05/20 03:44


指针表示字符串

/1/指针变量所占内存空间根据操作系统的位数会发生变化,同一位数操作系统下是固定的,64位操作系统占8个字节;

/2/当指针变量指向字符串时,不能改变字符串的值,因为字符串只存在常量区,常量区的值不能被改变;

/3/指针可以随意指向任意字符串;

 

数组表示字符串

/1/同一操作系统下,数组所占内存空间不是固定的,可以人为变大变小;

/2/用数组表示字符串,数组定义的字符串是可以改变的,通常用字符串处理函数

  strcpy(char*, const char *)来改变数组存储的字符串,并且字符串既存在常量区,也存在栈区。

 

 

下面举个例子来具体说明两者的区别:

#include <stdio.h>

#include<string.h>

 

intmain(int argc, const char * argv[]) {

char arr[] ="123";

char *p ="123";

printf("%p\n%p\n",arr,p);

printf("%s\n%s\n",arr,p);

printf("%p\n%p\n",&arr,&p);

printf("====================\n");


strcpy(arr,"456");            //改变数组arr存储的字符串;

p = "456";                       //改变指针p指向的字符串;

printf("%p\n%p\n",arr,p);

printf("%s\n%s\n",arr,p);

printf("%p\n%p\n",&arr,&p);

 

return 0;

}

 

打印结果:

0x7fff5fbff7dc         //数组arr的地址;

0x100000f6c   //指针p指向常量区“123”的地址;

123  //“123”存在栈区数组arr内,但实际是从常量区复制过来的,可以改变;

123   //“123”存在常量区,不可改变;

0x7fff5fbff7dc // 数组arr的地址;

0x7fff5fbff7d0 // 指针p的地址,存在栈区;

====================【下释义同上】

0x7fff5fbff7dc

0x100000f94

456

456

0x7fff5fbff7dc

0x7fff5fbff7d0



0 0
原创粉丝点击