传统数组的缺点:
1,数组的长度必须实现预定,且是常整数,不能是变量,
例如:
int a[5]; //正确
int len=5; int a[len]; //error
2,传统形式定义的数组,该数组内存程序员无法手动释放,在一个函数运行期间,系统为该函数中的数组所分配的空间会一直存在,直到该函数运行完毕,数组的空间才会被系统释放。
3,数组的长度不能在函数程序运行的过程中动态的扩充或缩小(长度定义之后就不能变化)
4,A函数定义的数组,在A函数运行期间可以被其他函数使用,但是A函数运行完毕之后,A函数中的数组将无法在被其他函数使用
传统型定义的数组无法跨函数使用(在一个函数内部定义的数组这个函数运行结束之后就释放了)
void g(int * pArr, int length) {
pArr[2] = 88; //通过指针改变数组的值
}
void function(void) {
int a[5] = { 1,2,3,4,5 };
g(a, 5); //调用g(a,5)函数
printf("%d\n", a[2]);
}
int main() {
char ch = 'A';
int i = 99;
double x = 66.6;
char *p = &ch;
int *q = &i;
double *r = &x;
/*一个指针占用四个字节具体参考上一篇文章:https://blog.csdn.net/ywl470812087/article/details/103380837*/
// printf("%d %d %d", sizeof(p), sizeof(q), sizeof(r)); //4 4 4
function(); //调研function()
while (true){}
}
为什么需要动态内存分配?
我讲解一下c语言中