指针的地址,与地址指针
时间: 2023-11-23 11:54:51 浏览: 22
指针和地址是密不可分的,指针就是地址,地址就是指针。地址是内存单元的编号,而指针变量则是存储内存地址的变量。在C语言中,指针变量可以用来存储一个变量的地址,从而可以通过指针变量来访问该变量。而地址指针则是指针变量本身的地址,可以通过"&"符号来获取指针变量的地址。例如,如果有一个指针变量p,那么"&p"就是指针变量p本身的地址。
相关问题
c++ 指针与 取地址符
C 中的指针是一个变量,用于存储内存地址。指针变量通过指针操作符(*)来声明,在声明时可以用取地址符(&)来获取某个变量的地址。
例如,假设有一个整数变量 num,我们可以声明一个指向该变量的指针 ptr,并通过取地址符获取 num 的地址:
```c
int num = 10;
int *ptr = #
```
在这个例子中,ptr 是一个指向整数的指针,通过 `int *` 声明。而 `&num` 表达式获取了 num 变量的地址,并将其赋值给了 ptr。
通过指针,我们可以访问被指向的变量。例如,可以通过解引用操作符(*)来获取指针所指向的变量的值:
```c
int value = *ptr;
```
在这个例子中,`*ptr` 表达式获取了 ptr 指针所指向的变量的值,并将其赋值给了 value 变量。
指针与取地址符的组合在 C 语言中常用于函数参数的传递和动态内存分配等操作。通过使用指针,我们可以在函数内部修改外部变量的值,或者动态分配内存空间来存储数据。
指针值传递与地址传递
指针值传递和地址传递是两种不同的概念。在C语言中,函数参数可以通过值传递或地址传递来传递给函数。
指针值传递是指将指针变量作为参数传递给函数,函数中对指针所指向的内存进行操作。这种方式下,函数内部对指针的修改不会影响到原始的指针变量。但是,函数中对指针所指向的内存的修改会影响到原始内存。
地址传递是指将变量的地址作为参数传递给函数。这种方式下,函数内部对地址所对应的变量进行操作,会直接影响到原始变量的值。通过地址传递,可以实现在函数内部对原始变量进行修改。
下面是一个示例代码,展示了指针值传递和地址传递的区别:
```c
#include <stdio.h>
// 指针值传递
void pointerValuePass(int* ptr) {
*ptr = 10; // 修改指针所指向的内存
ptr = NULL; // 修改指针本身不会影响原始指针
}
// 地址传递
void addressPass(int* ptr) {
*ptr = 20; // 修改地址对应的变量
ptr = NULL; // 修改指针本身不会影响原始指针
}
int main() {
int num = 0;
int* ptr = #
printf("Before pointerValuePass: num = %d\n", num);
pointerValuePass(ptr);
printf("After pointerValuePass: num = %d\n", num);
printf("Before addressPass: num = %d\n", num);
addressPass(&num);
printf("After addressPass: num = %d\n", num);
return 0;
}
```
输出结果为:
```
Before pointerValuePass: num = 0
After pointerValuePass: num = 10
Before addressPass: num = 10
After addressPass: num = 20
```
可以看到,指针值传递修改了指针所指向的内存,但没有修改原始指针的值;而地址传递直接修改了原始变量的值。