指针与字符串
# 指针与字符串
# 2.1指针的使用
- 函数返回多个值,通过指针返回结果,指针作为形式参数
2.1.1.c
- 函数返回运算状态,结果通过指针返回。即C语言中的try/catch
2.1.2.c
- 指针在使用之前一定要初始化,赋予指针变量地址
- 对数组进行操作
- 动态申请内存空间
指针与数组
数组变量是特殊的指针
//以下四中函数原型是等价的 数组名即为数组首地址是特殊的指针 int sum(int *array, int n); int sum(int *, int); int sum(int array[], int n); int sum(int [], int); int array[5]; // array == &array[0]
数组变量是
const
类型的指针,不可以被改变,不能被赋值
指针与const
const
指针,int * const p ;
与数组变量类似,表示一旦得到了某个变量地址,不能再指向其他变量,即不能作为游标来扫描。(指针不可修改)const int *p;
或者int const *p
表示不能通过该指针去修改这个变量,*p是const
不可修改。(通过指针不可修改)const int a[5];
const
数组,数组元素不可修改
# 2.2指针的计算
指针计算:对应地址空间(地址块为单位移动)
指针可以进行的运算:
- 指针加或减一个整数
- 递增递减 ++/--
- 两个指针相减(得到
sizeof
的个数)
*p++
用于地址空间遍历:2.2.1.c
*p++
的含义:取出p所指的内容,并移到下一个位置- ++的优先级高于*
- 常用于连续地址空间的遍历
0地址,不可使用的地址一般编译器中用
NULL
表示
动态内存分配malloc free
2.2.2.c
malloc
申请内存空间的大小是以字节为单位的malloc
返回的结果是void*
类型的,使用时需要进行类型转换malloc
申请空间失败会返回NULLfree
只能用于malloc
申请来的地址,地址被修改后无法free
# 2.3字符串操作
putchar(),getchar()
:在保准输入输出读写单个字符字符串数组:
char **a
:a是一个指针,指向另一个指向字符(串)的指针char a[][]
:a是一个字符二位数组char *a[]
:a是一个指针数组,数组元素都是指向另一个字符串的指针
int main(int argc, int const *argv[])
:argv[0]
是命令本身,后续为符号链接的名字(额外学习busybox
)字符串函数:
#include <string.h>
:strlen(); strcmp(); strcpy();
# 2.4函数的指针
指向函数的指针:
void (*pf)(int) = f;
根据用户输入决定调用的目标函数
2.4.1.c
int i = 0; void (*fa[])(int) = {f,g,h,k}; scanf("%d",&i); if(i>=0 && i<sizeof(fa)/sizeof(fa[0])){ (*fa[i])(0); }
上次更新: 2023/11/19, 12:55:48