[C++] 纯文本查看 复制代码 #include <bits/stdc++.h>
using namespace std;
//每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,
//它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:
void zhizhen_test1()
{
int var1;
char var2[10];
cout << "var1 变量的地址: ";
cout << &var1 << endl;
cout << "var2 变量的地址: ";
cout << &var2 << endl;
}
//什么是指针?
//指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。
//就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。
//指针变量声明的一般形式为:
void zhizhen_test2()
{
int *ip1; /* 一个整型的指针 */
double *dp; /* 一个 double 型的指针 */
float *fp; /* 一个浮点型的指针 */
char *ch; /* 一个字符型的指针 */
int var = 20; // 实际变量的声明
int *ip; // 指针变量的声明
ip = &var; // 在指针变量中存储 var 的地址
cout << "Value of var variable: ";
cout << var << endl;
// 输出在指针变量中存储的地址
cout << "Address stored in ip variable: ";
cout << ip << endl;
// 访问指针中地址的值
cout << "Value of *ip variable: ";
cout << *ip << endl;
}
//
//在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。
//赋为 NULL 值的指针被称为空指针。
int zhizhen_test3()
{
int *ptr = NULL;
cout << "ptr 的值是 " << ptr ;
//输出 0
return 0;
}
//指针的算术运算
int zhizhen_test4 ()
{
int var[3] = {10, 100, 200};
int *ptr;
// 指针中的数组地址
ptr = var;
for (int i = 0; i < 3; i++)
{
cout << "Address of var[" << i << "] = ";
cout << ptr << endl;
cout << "Value of var[" << i << "] = ";
cout << *ptr << endl;
// 移动到下一个位置
ptr++;//加法运算:可以对指针进行加法运算,此处实际增加一个int位,4byte
ptr--;//减法运算:可以对指针进行减法运算
}
while ( ptr <= &var[2] )//指针与指针之间的比较
{
cout << ptr << endl;
cout << *ptr << endl;
// 指向上一个位置
ptr++;
}
return 0;
}
//指针数组
int zhizhen_test5 ()
{
int var[3] = {10, 100, 200};
int *ptr[3];
for (int i = 0; i < 3; i++)
{
ptr[i] = &var[i]; // 赋值为整数的地址
}
for (int i = 0; i < 3; i++)
{
cout << "Value of var[" << i << "] = ";
cout << *ptr[i] << endl;
}
return 0;
}
// 指向指针的指针(多级间接寻址)
//指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。
//指针的指针就是将指针的地址存放在另一个指针里面。
int zhizhen_test6 ()
{
int var;
int *ptr;
int **pptr;
var = 3000;
// 获取 var 的地址
ptr = &var;
// 使用运算符 & 获取 ptr 的地址
pptr = &ptr;
// 使用 pptr 获取值
cout << "var 值为 :" << var << endl;
cout << "*ptr 值为:" << *ptr << endl;
cout << "**pptr 值为:" << **pptr << endl;
return 0;
}
//结构体指针
//作用:通过指针访问结构体中的成员
//利用操作符 -> 可以通过结构体指针访问结构体的属性
struct students
{
string name;
int age;
int scores;
};
int zhizhen_test7()
{
//1、创建学生结构体变量
struct students s1;
s1.name = "张三";
s1.age = 18;
s1.scores = 100;
//2、通过指针指向结构体变量
struct students* p = &s1;
//3、通过指针访问结构体变量中的数据
cout << "姓名:" << p->name << " ";
cout << "年龄:" << p->age << " ";
cout << "分数:" << p->scores << " " << endl;
system("pause");
return 0;
}
|