p=(int*)malloc(sizeof(int)*(n+1))
malloc 是内存分配 分配的空间以字节为单位 sizeof(int)*(n+1) 是求一个字节数的过程 sizeof(int)就是int类型的字节数,再*(n+1),其实就是连续的n+1个int型数的空间所含的字节数 前面二者合起来就是分配了大小为n+1个int型的空间所含的字节数 此时(int*)是强制转化为int型的指针,所以p就是一个指向这连续n+1个int的int指针。
这种分配内存的方式是C语言中实现的,为什么不直接指明字节数, 而用sizeof(int)这种运算是因为对于不同的计算机,对于int的分配空间不一定相同,这样有一定的移值性。
sizeof就是空间大小,malloc就是分配空间的意思,int整形 int* 将malloc分配的内存空间强制转换为int型的指针。 ( malloc申请的内存都是空类型 也就是 void * 但是, 这个内存取决于你怎么去使用,所以,将其转换为相应的类型是必要的! malloc返回的是void* ) 指针里边存放的只有地址而已 没有指向的内存大小 比如你可以把char *型的指针强制转换成int * 那么引用的时候就会取4个字节的内存 (原来只会取一个字节,这个就是强制转换的意义了吧) (int *)malloc(sizeof(int)) sizeof(int)=4 int占4个字节 (int *)malloc(sizeof(int *)) sizeof(int *)=4 指针占4个字节 (char *)malloc(sizeof(char)) sizeof(char)=1 char占1个字节 (char *)malloc(sizeof(char *)) sizeof(char *)=4 指针占4个字节 如果前面有声明char *malloc(); 那么malloc(sizeof(char))/malloc(sizeof(char *))等同于上面后2个 至于为什么要加 char * 这取决于malloc的左值, 因为malloc的左值是被声明为指向不同类型的指针, 不同类型的指针之间是不能赋值的,所以需要char * 进行强制类型转换
free(void *p)函数是用来释放程序动态申请的内存。其参数是个指针类型。 在C当中,只有当使用了动态内存申请函数malloc calloc realloc申请内存之后,才可以使用free来释放之。释放之后就不能再使用了。 在C++中,除了上述函数之外,还有new操作之后,都要使用free函数。 切记,动态申请内存使用完后,一定要记得释放,否则会有内存泄露问题。