问题描述:
根据下面的代码和结果回答下面的问题:
// Created by 黑马程序员.
#include "iostream"
using namespace std;
/**
* 指针变量语法:
* 数据类型 * 变量名 = 内存地址;
* `*` 在`声明`时,表示指针变量
* `*` 在`使用`时,取指针变量指向内存区域内的`数值`
* `&` 取变量的内存地址,如&num,得到num变量的内存地址
*/
int main()
{
int num = 10; // 标准的int类型变量,存放了一个int值 10
int * p; // 声明了一个p指针变量,这个指针变量中记录的地址(内存区域)存的是int
// 指针变量(如上的p变量),只用来记录内存地址
p = # // 将num变量的地址,赋予了p指针变量
cout << "&num取地址的结果是:" << &num << endl;
cout << "指针变量p中记录的地址是:" << p << endl;
cout << "取指针变量记录地址中存放的数值: " << *p << endl;
// 直接展示对内存的操纵
*p = 20; // 等同于 num = 20;
cout << "*p赋值后,结果:" << *p << endl;
cout << "num的结果:" << num << endl;
return 0;
}
结果:
D:\CLion_code\cmake-build-debug\CLion_code.exe
&num取地址的结果是:0x7ed15ffa94
指针变量p中记录的地址是:0x7ed15ffa94
取指针变量记录地址中存放的数值: 10
*p赋值后,结果:20
num的结果:20
Process finished with exit code 0
问题:
指针的定义是什么呢?特定类型数据在内存中的存储地址。指针变量的定义是什么呢?记录指针(内存地址)的变量。指针变量的定义有哪两种呢?第一种、先声明后赋值。第二种声明和赋值同时进行。int *p中的int是什么意思呢?说明指针指向区域的数据类型是int。int * p中的*是什么意思呢?*符号在声明是,指代变量为指针变量。*p中的*是什么意思呢?*符号在使用时,取指针指向内存区域的数值,表示取这个动作的意思,比如*p表示数字10。&num,取num变量内存地址,&表示取这个动作,不过和*的区别是*取的动作是地址对应的数值,而&表示的是地址。
问题解答:
你的问题围绕指针的概念和语法。以下是对这些问题的详细解答:
-
指针的定义:
- 指针是一个变量,它存储的是另一个变量的内存地址。也就是说,指针指向的是某个特定类型的数据在内存中的存储位置。
-
指针变量的定义:
- 指针变量是用来存储内存地址的变量。它记录的是指针所指向的内存地址,而不是实际的数据值。
-
指针变量的定义方式:
- 指针变量的定义有两种方式:
- 先声明后赋值:先声明一个指针变量,然后将一个变量的内存地址赋值给它。例如:
int *p; p = #
- 声明和赋值同时进行:在声明指针变量时,同时给它赋值。例如:
int *p = #
- 先声明后赋值:先声明一个指针变量,然后将一个变量的内存地址赋值给它。例如:
- 指针变量的定义有两种方式:
-
int *p
中的int
是什么意思:- 这里的
int
表示指针指向的区域的数据类型是int
。换句话说,p
是一个指向int
类型数据的指针。
- 这里的
-
int * p
中的*
是什么意思:- 在声明语句中,
*
表示该变量是一个指针变量。例如,int *p
表示p
是一个指向int
类型数据的指针。
- 在声明语句中,
-
*p
中的*
是什么意思:- 在使用时,
*
表示取指针变量指向的内存地址中存储的数值。例如,*p
表示获取指针p
指向的内存地址中存储的实际数据值。
- 在使用时,
-
&num
中的&
是什么意思:&
表示取某个变量的内存地址。例如,&num
表示获取变量num
的内存地址。与*
不同,*
在使用时取的是地址对应的数值,而&
取的是变量的地址。