C语言基础:指针的理解与应用
发布时间: 2024-03-28 23:03:07 阅读量: 39 订阅数: 21 ![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
# 1. 指针的理解与应用】
### 章节一:指针的概念和基本语法
- 1.1 什么是指针?
- 1.2 指针的声明和初始化
- 1.3 指针的运算:取地址运算符和间接访问运算符
# 2. 指针与变量的关系
- 2.1 指针与变量的关联
在C语言中,指针与变量之间存在着密切的关联,通过指针可以访问和操作变量的地址和内容。下面我们来看一个简单的示例代码:
```c
#include <stdio.h>
int main() {
int num = 10; // 定义一个整型变量num,并赋值为10
int *ptr; // 定义一个整型指针ptr,用于存储变量num的地址
ptr = # // 将变量num的地址赋给指针ptr
printf("变量num的值为:%d\n", num);
printf("通过指针访问变量num的值:%d\n", *ptr);
return 0;
}
```
**代码说明:**
1. 首先定义一个整型变量`num`,并赋值为10。
2. 然后定义一个整型指针`ptr`,用于存储变量`num`的地址。
3. 将变量`num`的地址赋给指针`ptr`。
4. 最后通过指针访问并输出变量`num`的值。
**代码总结:**
- 通过指针可以间接访问变量的值,从而实现对变量的操作和修改。
**结果说明:**
运行上述代码,输出结果为:
```
变量num的值为:10
通过指针访问变量num的值:10
```
这样我们就展示了指针与变量之间的关联,指针的强大之处在于可以操作和访问变量的地址和内容,为程序提供了更多的灵活性。
# 3. 指针作为函数参数
在C语言中,指针作为函数参数是一种常见的用法,通过传递指针可以实现对变量值的修改,同时可以减少内存占用和提高性能。下面我们将详细介绍指针作为函数参数的相关内容。
#### 3.1 指针作为函数参数的基本原理
当我们将指针作为函数参数传递时,实际上是传递了变量的地址,在函数内部可以通过该地址对变量进行修改。这样可以在函数外部直接获取函数内部修改后的值。
```c
#include <stdio.h>
void increment(int *ptr) {
(*ptr)++; // 通过指针修改变量的值
}
int main() {
int num = 10;
printf("Before increment: %d\n", num);
increment(&num); // 传递变量地址
printf("After increment: %d\n", num);
return 0;
}
```
**代码说明:**
- 定义了一个`increment`函数,接受一个整型指针作为参数,并通过该指针修改变量的值。
- 在`main`函数中定义了一个整型变量`num`,并输出修改前后的值。
- 调用`increment`函数时,传递了`num`的地址,函数内部对`num`进行自增操作。
**运行结果:**
```
Before increment: 10
After increment: 11
```
#### 3.2 传递指针 vs 传递数值
传递指针和传递数值作为函数参数的区别在于传递指针可以直接修改变量的值,而传递数值则只是传递了值的拷贝,对于函数外部变量本身不会有任何改变。
```c
#include <stdio.h>
void changeValue(int num) {
num = 20; // 修改局部变量的值
}
void changeValueByPtr(int *ptr) {
(*ptr) = 30; // 通过指针修改变量的值
}
int main() {
int a = 10, b = 10;
changeValue(a); // 传递数值
printf("After changeValue: %d\n", a); // 不会改变a的值
changeValueByPtr(&b); // 传递指针
printf("After changeValueByPtr: %d\n", b); // 会改变b的值
return 0;
}
```
**代码说明:**
- 定义了一个`changeValue`函数和一个`changeValueByPtr`函数,一个传递数值,一个传递指针,并在函数内部修改变量的值。
- 在`main`函数中定义了两个整型变量`a`和`b`,并输出修改前后的值。
- 调用`changeValue`函数时,传递了`a`的值,函数内部修改的是局部变量。
- 调用`changeValueByPtr`函数时,传递了`b`的地址,函数内部对`b`进行赋值操作。
**运行结果:**
```
After changeValue: 10
After changeValueByPtr: 30
```
#### 3.3 指针函数和指向函数的指针
除了可以将指针作为函数参数,还可以定义指针函数和指向函数的指针。
```c
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
int main() {
int (*funcPtr)(int, int);
funcPtr = &add; // 指向add函数
printf("Addition: %d\n", funcPtr(10, 5));
funcPtr = ⊂ // 指向sub函数
printf("Subtraction: %d\n",
```
0
0
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)