C语言指针详解

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

目录

1. 指针定义

1.1 指针定义

1.2 指针类型

1.3 指针大小

2. 指针内存

2.1 指针内存申请

2.2 指针内存释放

3. 指针运算

3.1 指针的自增与自减

3.2 指针的取值

4. 指针与字符串

4.1 字符串的声明

4.2 字符串指针的应用

5. 指针与数组

6. 指针与结构体

6.1 结构体指针成员

6.2 结构体指针变量

7. 指针与函数

7.1 指针函数

7.2 函数指针

7.3 函数指针参数

7.4 函数二级指针参数

8. 指针与内存泄漏

8.1 内存泄漏产生

8.2 内存泄漏避免


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 指针的取值

    指针的取值是通过解引用操作符(*)来实现的。当我们有一个指针变量时,可以使用解引用操作符获取该指针所指向的内存地址中存储的值

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值