Linux C编程:const指针与函数详解
需积分: 0 133 浏览量
更新于2024-08-26
收藏 6KB TXT 举报
实参是两个不同的作用域,互不影响。
一、const修饰的指针
在C语言中,`const`关键字用于修饰变量,表示该变量的值不应被程序修改。当`const`修饰指针时,有两种情况:
1. 指向常量的指针:`const int *p` 表示指针`p`所指向的内容是不可变的,但指针`p`本身的地址可以改变,也就是说你可以将`p`指向其他变量。例如,如果`p`最初指向`a`,你不能通过`*p`来改变`a`的值,但可以重新赋值`p`使其指向其他变量。
2. 指针常量:`int *const p` 表示指针`p`本身是常量,它的地址不可改变,即`p`一旦指向某个地址,就不能再改变。但是,可以通过`p`访问的内存空间内的值是可以修改的,如果`p`指向`a`,则可以通过`*p`来改变`a`的值。
二、函数
函数是C语言中实现模块化编程的重要手段。函数可以分为库函数和自定义函数:
- 库函数:由标准库或第三方库提供的函数,如`printf()`、`scanf()`等,可以直接调用而无需编写函数体。
- 自定义函数:根据需求编写的函数,用于实现特定功能。
函数定义的一般形式如下:
```c
返回值类型 函数名(参数类型 参数名1, 参数类型 参数名2, ...) {
函数体;
return 返回值; // 返回值类型应与函数声明保持一致
}
```
在调用函数时,需注意以下几点:
- 形参列表的类型和顺序必须与函数定义中的形参列表完全匹配。
- 实参的值会被复制到形参中,形参和实参在内存中是分开的,修改形参不会影响实参的值,除非使用指针或引用。
三、函数声明
函数声明告诉编译器函数的名称、返回类型和参数列表,以便在调用函数之前编译器能进行类型检查。函数声明通常放在函数定义之前,例如:
```c
返回值类型 函数名(参数类型, ...);
```
四、指针作为参数传参
在函数中,使用指针作为参数可以实现对原变量的直接修改。当指针作为参数传递时,实际传递的是指针的地址,而非它所指向的值。因此,函数内部可以通过指针修改其指向的变量,如:
```c
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int x = 10, y = 20;
swap(&x, &y); // x和y的值会交换
```
五、一维和二维数组的传参
在C语言中,数组名实际上是指向数组首元素的指针。因此,传递一维数组的参数就像传递普通指针一样。而对于二维数组,由于它实际上是数组的数组,传递时通常传递行指针,例如:
```c
void printArray(int arr[3][4]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main() {
int matrix[3][4] = { /* 初始化 */ };
printArray(matrix);
return 0;
}
```
六、函数指针
函数指针是一个指向函数的指针,可以用来作为参数传递给其他函数,或者作为其他函数的返回值。例如:
```c
void printInt(int num) { printf("%d\n", num); }
void callFunction(void (*func)(int), int value) {
func(value);
}
int main() {
callFunction(printInt, 100);
return 0;
}
```
七、指针函数
指针函数是指返回指针的函数,可以用来动态分配内存或返回结构体的指针等。例如:
```c
int *getIntPtr() {
int *ptr = (int *)malloc(sizeof(int));
*ptr = 42;
return ptr;
}
int main() {
int *myPtr = getIntPtr();
printf("%d\n", *myPtr);
free(myPtr);
return 0;
}
```
八、递归函数
递归函数是一种在其定义中调用自身的函数。递归通常用于解决分治问题,如阶乘计算、树遍历等。例如,计算阶乘的递归函数:
```c
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
printf("%d\n", factorial(5)); // 输出 120
return 0;
}
```
九、main函数传参
`main`函数可以接收命令行参数,这些参数在`main`函数中以`char *argv[]`的形式存在。`argv[0]`通常是程序名,`argv[1]`及其后的元素是用户在命令行中输入的参数。例如:
```c
int main(int argc, char *argv[]) {
if (argc > 1) {
printf("Received argument: %s\n", argv[1]);
}
return 0;
}
```
在命令行运行`./program arg1 arg2`,程序会输出`Received argument: arg1`。
三度女青年
- 粉丝: 49
- 资源: 22
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析