C语言中的数组,按照理解分为两种:
1 狭义的数组,指的是以
TYPE name[M]...;
形式定义的数组,也称为静态数组。静态数组在定义的时候就确定了数组的大小,无法在运行中对其做改变。
2 广义的数组,除静态数组外,还包括动态数组。
动态数组的本质为指针,如
TYPE *name;
对指针上可以用malloc等函数,分配内存空间,实现与静态数组类似的操作。对于动态数组,可以使用realloc函数,
void * realloc(int size, void *p);
重新分配参数p上的内存大小为参数size。
新返回的的地址值,可能与参数p的原始地址值不同。
该函数可以使p上可使用的内存大小调整到size字节,从而实现动态数组大小的调整。
1.对静态分配的数组和动态分配的数组分别使用sizeof获得其长度,结果是不一样的:
int a[10]; 则sizeof(a)等于10*sizeof(int)。
int* a=(int*)malloc(10*sizeof(int));则sizeof(a)等于sizeof(int*)。
2、数组名作为函数的参数时
数组名作为函数的参数传递时,在函数内使用sizeof(a)(此处假设a为数组),结果都为指针的长度(无论a为静态数组还是动态数组),而非数组的实际长度。
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s = "hello";
//定义一个char类型指针,把string s的首元素地址赋给pt,则pt指向字符串s.
char *pt = &s[0];
cout << pt << endl;
return 0;
}