指针与字符串
# 指针与字符串
# 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.cint 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