我刚刚开始使用指针,我有点困惑.我知道&表示变量的地址,*可以用在指针变量的前面,以获取指针指向的对象的值.但是,当您使用数组、字符串或使用变量的指针副本调用函数时,情况会有所不同.很难看出这一切背后的逻辑模式.

我应该什么时候使用&*

推荐答案

你有指针和值:

int* p; // variable p is pointer to integer type
int i; // integer value

将指针转换为*的值:

int i2 = *p; // integer i2 is assigned with integer value that pointer p is pointing to

您可以将值转换为带有&的指针:

int* p2 = &i; // pointer p2 will point to the address of integer i

编辑: 在数组的情况下,它们被视为非常类似于指针.如果您将它们视为指针,您将使用*来获取它们内部的值,如上所述,但是还有另一种更常见的使用[]运算符的方法:

int a[2];  // array of integers
int i = *a; // the value of the first element of a
int i2 = a[0]; // another way to get the first element

要获取第二个元素,请执行以下操作:

int a[2]; // array
int i = *(a + 1); // the value of the second element
int i2 = a[1]; // the value of the second element

[]索引运算符是*运算符的一种特殊形式,它的工作原理如下:

a[i] == *(a + i);  // these two statements are the same thing

C++相关问答推荐

C指针算法在函数参数中的应用

我编译了一个新的c程序,并收到以下错误

为什么内核使用扩展到前后相同的宏定义?

从纯C中访问通用项对话框

二进制计算器与gmp

致命:ThreadSaniizer:在Linux内核6.6+上运行时意外的内存映射

如何捕捉只有换行符或空格字符缓冲区的边缘大小写

进程在写入管道时挂起

如何在CANbus RX/TX FIFO起始地址寄存器(ATSAME 51)的特定地址初始化数组?

用C++从外部ELF符号读取值

==284==错误:AddressSaniizer:堆栈缓冲区下溢

将返回的char*设置为S在函数中定义的字符串文字可能会产生什么问题?

如何在POSIX-UEFI中获得输入?

如何将另一个数组添加到集合中,特别是字符串?

预处理器宏扩展(ISO/IEC 9899:1999(E)§;6.10.3.5示例3)

试图创建一个基本的Word克隆,但遇到了障碍

链接器脚本和C程序使用相同的头文件,这可能吗?

从另一个宏函数调用C宏

如何在MSVC中使用intSafe.h函数?

解密Chrome加密密钥