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


指针表示字符串

/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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值