资讯动态

C语言基础笔记 04 指针

发布时间:2026/10/21 2:24:40 来源:尧图企业网站定制
00 包目前CLion的最新版本还不支持中文需要导入#include stdlib.h 再在main函数内写system(chcp 65001);才能在代码中用中文stdlib 还可以提供动态内存分布——malloc函数01 使用原因对于函数在函数外定义的变量函数内进行的运算不会影响函数外变量大小定义 int bn; b 改变时n不会改变为了让改变同时发生我们需要指针02 定义格式指针: 也是一种定义变量的方式指针变量被用来存储另一个变量的地址通过地址来操作数据格式 你要存储的变量地址的类型 *指针变量名;//取地址变量名//int m 10; 定义了一个整数型指针 它可以存储一个整数型变量的内存地址int *pm m;03 语法01 改变值指针操作 如何通过指针变量操作它存储的地址中的数据 *指针变量 值; *a; 错误 *a*a1; 正确 定义指针变量 int *pmm; 函数void add(int *a){ *a*a1;} int n0; add(n); 02 不同的输出结果输出变量名输出*指针变量名变量值输出变量名输出指针变量名指针变量数据存储的地址编码变量内存地址04 与数组结合01 相关知识**计算机操作的基本单位是byte**数组的储存地址是连续的间隔由变量单位大小决定如int间隔4char间隔1输出 *数组变量名数组第0号变量值 输出 *数组变量名i数组第i号变量值输出 数组变量名输出 数组变量名 输出数组变量名[0]数组第一个变量的储存地址数组变量名 也相当于一个指针因此通用一些操作C语言的函数 不支持直接返回数组 int[] test(){}不合法解决方法 可以使用指针来存储数组的地址 进行返回返回值为指针时写 int* 02 试错int* createArray(int n) { //创建函数返回值为int指针参数为一个int变量 int arr[n]{0,10,20}; //创建数组arr // for(int i0;i10;i) { // printf(%d\n,arr[i]); // } return arr; //返回值为指针int* arr } int main() { int* parrcreateArray(10); //创建指针 int*parr数组存储地址 for(int i0;i10;i) { printf(%d\n,parr[i]);//输出数组存储的数据 } }结果无论是本代码还是输出*parr都会导致崩溃注释化的输出数组元素仍然可以正常运行可以CLion和DEV C一起用找错原因是变量的生命周期有界性定义一个变量之后 它在什么时候会消失 在该变量定义的大括号范围之外就不能使用了arr是函数内定义的变量函数外无法调用03 解决方式 动态数组使用内存分配函数相当于在内存中分配一块空间用于储存数据不会因有界性而失效格式数据类型 *数组名(数据类型*)malloc(内存大小);注意内存单位为byte因此对不同类型的数据需要分配不同大小的内存例如 int n; malloc(n*4);int* createArray(int n) { int *arr (int*) malloc(n*4); // arr 是一个指针存储的是一整块内存空间的首地址 指针相当于数组 // 使用内存分配函数分配一块内存(长n*4)给一个指针充当一个数组 for (int i0;i5;i) { *(arri)i*5; //进行了初始化非必要 } //arr[i]i*5; 也可数组指针通用操作 return arr; } int main() { int* parrcreateArray(10); //把创建的指针*arr的地址赋值给*parr for(int i0;i10;i) { //指针数组通用操作 printf(%d\n,parr[i]); //*(parri)也可 } }04 扩展 字符串字符串也是一种数组因此支持通用操作char name[10];scanf(%s,name[0]);scanf(%s,name);scanf(%s,name); //三者作用相同char *cp (char*) malloc(10);scanf(%s,cp); //与指针结合

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑