目录
1. 指针定义
1.1 指针定义
指针是一个变量,用于存储另一个变量的内存地址
1.2 指针类型
指针可以指向基本数据类型,也可以指向结构体类型
其中void类型的指针可以指向任意类型的指针
int main(void)
{
int a = 10;
double b = 1.1;
student_t student = {"zhangsan", 16, 'm'};
int* ptr_a = &a;
double* ptr_b = &b;
student_t* ptr_student = &student;
void* ptr_v = &a;
}
1.3 指针大小
指针只与机器位数有关,与所指类型无关,指针在32位机器下是4个字节,在64位机器下是8个字节
2. 指针内存
如果指针只是指向局部变量,则无需申请与释放,如果指针所指的数据需要存储且跨函数声明周期使用,则需要申请内存,比如链表,节点需要申请内存,并存储到链表中
2.1 指针内存申请
malloc 函数用于分配一块指定大小的内存块,并返回一个指向该内存块的指针。你需要提供要分配的内存块的大小(以字节为单位)。如果分配成功,它将返回指向新内存块的指针,否则返回 NULL
int* ptr_int = (int*) malloc(sizeof(int));
*ptr_int = 20;
double* ptr_double = (double*) malloc(sizeof(double));
*ptr_double = 1.5;
2.2 指针内存释放
free 函数用于释放先前使用 malloc、calloc 或 realloc 分配的内存。它接受一个指向要释放的内存块的指针作为参数。成功释放内存后,指针不再指向有效的内存
free(ptr_int);
free(ptr_double);
3. 指针运算
3.1 指针的自增与自减
指针自增与自减本质是对指针进行加法或减法操作。自增(++)或自减(--)运算符可以应用于指针,以改变指针的当前位置。对于不同类型的指针,移动的存储单元长度是不同的,移动长度大小是所值变量类型的大小
int main(void)
{
int array[5] = { 1, 2, 3, 4, 5 };
int *ptr = array;
int count = 0;
while(count < 5)
{
printf("%d\n", *ptr);
ptr++;
count++;
}
}
3.2 指针的取值
指针的取值是通过解引用操作符(*)来实现的。当我们有一个指针变量时,可以使用解引用操作符获取该指针所指向的内存地址中存储的值

本文详细介绍了C语言指针的相关概念,包括指针定义、内存管理、运算操作、字符串和数组的应用,以及在结构体和函数中的使用。重点讲解了内存泄漏的产生及避免方法,强调了正确管理和释放内存的重要性。
最低0.47元/天 解锁文章
37万+





