数组要么在静态存储区被创建(如全局数组),要么在栈上呗创建。
数组名对应一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。
指针随时指向任意类型的内存块,特征是“可变”,常用指针来操作动态内存。‘
特性比较:
1.修改内容:
char a[]="hello";
a[0]='X';
cout<<a<<endl;
char* p="world";
p[0]='X'; //企图修改常量字符串的内容导致出错
cout<<p<<endl;
2.内容复制与比较
char a[]="hello";
char b[10];
strcpy(b,a);
if(strcmp(b,a)==0)
int len=strlen(a):
char* p=(char*) malloc(sizeof(char)*(len+1));
strcpy(p,a);
if(strcmp(p,a)==0)
3.计算内存容量
C++/C没有办法知道指针所指内存容量,除非申请内存时记住它。
char a[]="hello world";
char *p=a;
cout<<sizeof(a)<<endl; //12个字节
cout<<sizeof(p)<<endl;//4个字节 ,得到的是一个指针变量的字节数,相当于sizeof(char*),而不是p所指内存容量
当数组作为函数的参数进行传递时,数组自动退化为同类型的指针,不管a的容量是多少.
sizeof(a)始终等于sizeof(char*)
void Fun(char a[100]
{
cout<<sizeof(a)<<endl;//4字节而不是100字节
}