指针表示字符串
/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 |
|