C高级(介绍)

这篇博客详细介绍了C语言中的指针概念,包括变量定义、指针解引用、指针自增以及二级指针的使用。同时,讨论了数组指针、函数调用以及递归函数的应用,并提供了gdb调试的基本指令。文章强调了指针安全性和匹配性,以及如何避免野指针。此外,还提及了函数嵌套和递归函数的限制。
摘要由CSDN通过智能技术生成

指针

指针简介

变量形式:数据类型*变量名;

注意事项:

1.在定义指定变量时,起到标志性的作用,除此之外,所有指针变量前加*,表示指针指向的内存

2.*指针变量:可以作左值也可以作右值

3.*指针变量:本质就是解引用,访问从保存的地址开始,n个连续的内存

4.指针变量要与保存地址类型匹配,否则保存地址不报警,但输出值错误

不要出现野指针,如果指针不知道指向哪里,可以指向NULL

gdb调试常用指令

编译:gcc xx.c -o xx -g

执行:gdb ./xx

gdb内部指令:r:运行;b 行号/函数名:打断点; n:单步调试; p 变量名:打印变量数据; q:退出gdb;l:查看代码

二级指针

一级指针变量保存普通变量的地址

二级指针变量保存一级指针变量的地址

指针自增

指针自增的方式访问数组每个元素,指针的指向发生改变

通过指针加上一个整数的方式访问数组的每个元素,指向没发生改变

指针和下标的组合访问数组的每个元素等价于*(p+i)

数组指针

本质是一个指针变量,保存数组的起始地址

语法:每个元素的类型(*p)[元素个数],

例:int(*p)【8】:表示p是一个指针变量,保存8个元素,每个元素是整型的数组的起始地址

一维数组指针

//p:保存的是数组的起始地址

//p+1:偏移一个数组大小

//*p:表示数组首元素的起始地址

//*p+i:表示数组的起始地址

二维数组指针

p:是一个数组指针,保存二维数组第一行的起始地址

p+i:第i+1行的起始地址

*(p+i):每一行第一个元素的起始地址

*(p+i)+j:每一行每一个元素的起始地址

*( *p+i)+j):每一行的每一个元素

指针数组:本质就是一个数组,每个元素都是指针类型

函数

内置函数:既终端自带的 函数库,需要用到时可以参考函数手册

函数定义

例:#include <stdio.h>double add_function(int , double ); //函数声明:提前告诉编译器函数的类型 double sub_function(int x, double y){ double result ; result = x-y; return result; } int main() //主函数 调用函数 { int a = 1; double b = 2.5; double ret; // ret = add_function(a, b); //函数调用 , a,b 实参 ret = sub_function(a, b); printf("ret = %.2lf\n",ret); ​ return 0;} ​//函数定义: 具体实现某个功能的步骤 x, y是形参 ​double add_function(int x, double y) //子函数 被调用函数 ​{ double result; ​ result = x+y; ​ return result;} ​

函数嵌套:不可无限嵌套,会导致栈越界

递归函数

#include int factorial(int a) { if (a == 1) return 1; else { a = a * factorial(a-1); return a; } } int main() { int ret; ret = factorial(5); printf("ret = %d\n", ret); return 0; }

@被下列文档引用 · 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值