C语言——指针简介及基本要点

C语言中的指针是C语言的核心特性之一,它允许程序员直接访问内存地址。指针变量存储的是变量的内存地址,而不是变量的值。通过指针,程序可以更加灵活地操作内存中的数据,进行数据的动态分配和访问。下面是一些关于C语言指针的基本概念和使用方法。

C语言的指针是一个非常强大的特性,它允许程序员直接操作内存地址。以下是一些关于C语言指针的基本要点:

指针变量本质上也是一个变量,包含变量类型,变量值,变量地址,变量名四个要点。指针变量与其他变量不同的地方是,指针变量的值是一个地址,我们把指针变量称为指向其保存的地址的指针。而指针变量本身也有一个地址,此时如果有另一个变量b保存的是这个指针a的的地址,那么这个变量b也是指针变量,且是二级指针。

1. 指针变量:

存储内存地址的变量。声明指针时,需要指定它将要指向的数据类型。

    int *p; // p是一个指向int类型数据的指针

*符号只有在定义的时候代表指针变量,其他情况下为取值运算符,具体看4。

不同类型的指针决定指向空间的大小,也决定着增量。

2.地址运算符 &

用于获取变量的内存地址。

int var = 10;
int *p = &var; // p现在存储了var的内存地址

3.间接引用运算符 *

通过指针访问它所指向的内存地址上的数据。

int var = 10;
int *p = &var;
printf("%d", *p); // 输出var的值,即10

4.指针的指针

一个指针可以指向另一个指针,这在某些复杂数据结构中很有用。

int a = 5;
int *p1 = &a;
int **p2 = &p1;

5.指针数组

一个数组,其元素都是指向相同数据类型的指针。

int *array_of_pointers[10];

6.函数指针

指针可以指向函数,这允许通过指针调用函数。

void function() {}
void (*func_ptr)() = function;
func_ptr(); // 调用function函数

7.指针与数组

数组名本身就是一个指向数组首元素的指针。

int array[5] = {1, 2, 3, 4, 5};
int *p = array; // p指向array的第一个元素

8.指针的算术运算

可以对指针进行加法和减法运算,这通常用于数组。

int array[5] = {1, 2, 3, 4, 5};
int *p = array;
p++; // p现在指向array的第二个元素

9.空指针

一个指针可以被初始化为NULL,表示它不指向任何有效的内存地址。

int *p = NULL;

10.动态内存分配

使用malloccallocreallocfree等函数可以动态地分配和释放内存。

int *p = malloc(sizeof(int) * 10); // 分配一个可以存储10个int的内存块
free(p); // 释放之前分配的内存

注意事项

  • 使用指针时要非常小心,因为错误的指针操作可能导致程序崩溃或数据损坏。
  • 指针在被解引用之前,必须确保它已经被赋予了有效的地址,即它指向了一个合法的内存位置。
  • 指针运算时要考虑到它所指向的数据类型的大小。
  • 动态分配的内存使用完毕后,必须手动释放,以避免内存泄漏。

指针是C语言编程中非常强大但也非常复杂的特性,掌握它对于深入理解C语言及其底层机制至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hardStudy_h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值