【干货】C语言指针用法分类(完整)

本文详细介绍了C语言指针的八大用法,包括基本类型指针、通用指针、指针数组与数组指针、函数指针与指针函数、结构与联合指针、枚举指针、指针常量与常量指针以及指针的指针。通过实例解析了每种用法,旨在帮助读者深入理解C语言指针的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当你选择了一种语言,意味着你还选择了一组技术、一个社区。——Joshua Bloch

C语言指针用法灵活,本文完整列出8大类用法,供大伙学习。

如果觉得对大伙有所帮助,记得关注,点赞! 转发,分享一下~

指针分类
  • 基本类型指针
  • 通用指针 void *
  • 指针数组和数组指针
  • 函数指针和指针函数
  • 结构指针和联合指针
  • 枚举指针
  • 指针常量和常量指针
  • 指针的指针

基本类型指针

指向整型和浮点型的指针。包括char,int,float,double类型指针

通用指针

void * 声明一个通用指针,该指针可以和除函数指针类型之外指针类型相互转换。

例如:
void *p;
int *ip;
p = ip;
ip = p;

指针数组和数组指针

指针数组:指针数组的每个元素都是指针类型。

例如:

// ip是数组类型,数组中每个元素是int型指针。
int *ip[];
// fp是数组类型,数组中每个元素是float型指针。
float *fp[];

数组指针:指针类型,指向数组。

例如:

int a[100] ; // 声明和定义数组a
int *pa = a; // 声明指针pa,并且将数组a的首地址赋值给pa
int a1 = *(pa+1); // 获取数组a第2个元素的值,即a[1]的值

注:数组名本身就是当做地址常量赋值给指针,不需要 & 地址运算符。

函数指针和指针函数

### C语言编程知识点总结 #### 函数指针及其应用 函数指针是一种特殊的指针类型,它指向的是函数而不是普通的变量。通过函数指针调用函数的方式可以实现动态绑定和回调机制,在某些场景下非常有用[^1]。 下面是一个简单的例子展示如何定义并使用函数指针: ```c #include <stdio.h> // 定义三个简单函数 int add(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } int multiply(int a, int b) { return a * b; } int main() { // 声明一个函数指针类型的变量 int (*operation)(int, int); operation = add; // 将add函数赋给操作符 printf("Add result: %d\n", operation(5, 3)); operation = subtract; // 更改到subtract函数 printf("Subtract result: %d\n", operation(5, 3)); operation = multiply; // 更改为multiply函数 printf("Multiply result: %d\n", operation(5, 3)); return 0; } ``` 上述代码展示了如何创建以及切换不同的算术运算逻辑而无需修改核心算法结构。 #### 数组与字符串处理 在C语言中,字符数组通常被用来表示字符串。需要注意的是,字符串是以'\0'作为结束标志的连续存储区域。因此,在进行任何涉及字符串的操作前都应确保有足够的空间容纳整个串加上终止符[^2]。 例如复制一段文本至另一缓冲区时可采用如下方法: ```c char source[] = "Hello World!"; char destination[50]; strcpy(destination, source); printf("Copied string is '%s'.\n", destination); ``` #### 动态内存管理 对于不确定大小的数据集合来说,静态分配可能不够灵活;此时就需要借助malloc(), calloc(), realloc() 和 free() 来手动控制程序运行期间所需的资源量[^3]。 示例演示申请整数型向量的过程: ```c int n = 10; int* vector = (int*) malloc(n * sizeof(int)); if (!vector){ fprintf(stderr,"Memory allocation failed"); }else{ for(int i=0;i<n;i++) vector[i]=i*i; // 使用完毕释放该段内存 free(vector); } ``` 以上仅列举部分重要概念供参考学习之用。深入理解这些基本要素有助于构建更复杂的应用程序框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值