目录
1.二级指针
2.malloc()函数
3.calloc()函数
4.realloc()函数
5.容易混淆的的指针小知识点
1.二级指针
int **p;//定义一个二级指针
int *q[10]; //定义一个指针数组,数组中每个元素是一个指针
2.malloc()函数
C 库函数 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。
p = (类型*)malloc(sizeof(int) * 10)
这里是是申请一个10个int空间大小的空间
之后要进行if条件判读是否为空指针
重点是malloc后需要用memset()对空间进行初始化
memet()
C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
声明 void *memset(void *str, int c, size_t n)
记得用完这个空间后需要释放空间,否则可能出现内存泄漏
free(p);
3.calloc()函数
C 库函数 void *calloc(size_t nitems, size_t size) 分配所需的内存空间,并返回一个指向它的指针。malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。
声明
void *calloc(size_t nitems, size_t size)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, n;
int *a;
printf("要输入的元素个数:");
scanf("%d",&n);
a = (int*)calloc(n, sizeof(int));
printf("输入 %d 个数字:\n",n);
for( i=0 ; i < n ; i++ )
{
scanf("%d",&a[i]);
}
printf("输入的数字为:");
for( i=0 ; i < n ; i++ ) {
printf("%d ",a[i]);
}
free (a); // 释放内存
return(0);
}
4.realloc()函数
C 库函数 void *realloc(void *ptr, size_t size) 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
声明
void *realloc(void *ptr, size_t size)
5.容易混淆的的指针小知识点
1. a是一维数组名,a+1,往后挪了一个元素的地址,a是一级指针,挪一级指针挪了一个元素
2. a是二维数组名,a+1往后挪了一行元素的地址,a是二级指针,挪二级指针挪了一行元素
3. a是二维数组名,&a+1往后挪了整个数组的地址,a是二级指针,&a是三级指针,挪三级指针挪了整个数组
1. 计算sizeof(二维数组名),计算的是整个数组占的空间大小,
2. 计算sizeof(一维数组名), 计算的是一维数组占的空间大小
3. 计算sizeof(二维数组的行地址),计算的是二维数组中某行占空间大小
4. 计算sizeof(无论什么地址),计算的是地址占空间大小,与系统位数有关64位系统是8个字节,32位系统是4个字节