前言
最近研究二级指针,发现了二级指针配合realloc函数其实可以用来实现动态数组
这篇博文我只实现动态数组的push_back操作,就是在数组的末端增加一个元素
修正一个思想
c语言的函数参数,是不能在函数内部被修改的!!!因为传进来的参数,是拷贝构造
我们平时说"传指针就可以在函数内修改参数",实际上是误导学生的说法,
因为这个时候,函数的参数是指针,而这时候你会发现,你函数返回以后,这个指针变量没有被修改,也就是说,函数的参数还是没有被修改!!!
一旦学生遇到一个"需要操作指针变量"的函数时会不知所措被水淹没,这种思想荼毒很深!!!
应该这么记忆(三点)
1.函数函数参数,是不能在函数内部被修改的
2.但是,在函数内部仍然使用可以用某个变量的指针,直接指向函数外部,修改这个外部变量的值
3.函数的参数,可以是你需要修改的那个变量的指针
套用上面的新思想,我来设计这个动态数组的push函数
我们所希望的push函数的使用方法(函数my_push_back3)
int main()
{
char *line = (char *)malloc(6);
//strcpy(line, "CHINA");//注意"\0"的问题,CHINA有5个字符,但是c语言自带的strcpy会给最后一个字符加上\0,原本我malloc写的是5,但是发现如果写5,strcpy不会出错,但是realloc会报错!!!!不知道这是为什么
line = (char *)realloc(line, 7);
char *arr = (char *)malloc(4);
arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c';
arr[3] = '\0';
printf("%s\n",arr);
int num = my_strlen(arr);
printf("array length %d\n",num);
my_push_back3(&arr, 'e')