c++ 学习笔记 07

为游戏编程学C++

指针

指针,本质上是保存其他变量地址的变量。

当我们创建变量时,背后发生的事情是内存分配。比如,为一个int类型的变量预留4个字节的内存空间,它有自己的存储段和一个地址,地址就是计算机来定位这4个字节的,当计算机读取到之后向用户现实数据读取的内容。

每个字节段都有自己的地址,通常该地址被视为该段中的第一个字节的位置。

为什么要使用地址

调用函数,把一个结构体作为输入参数时,首先复制这个结构体来初始化输入参数,即为该函数创建的占位符。该结构体的每个元素(变量、函数)都会一一复制到临时局部结构体中。如果结构体非常大,就会创建很大的临时空间,在内存中传递时效率很低。

传递地址时,只传递一个代表地址的数字,告诉别人那个需要的结构体在哪里,然后直接访问那块内存。

指针的创建和初始化

int* ptr;

int*是一个指向int的指针,而不是int类型。

指针不需要在声明时初始化。需要给他一个变量的地址来初始化它。

int myInt = 2;
ptr = &myInt;

&作为引用时,引用对应对象的的内存位置。而作为取地址运算符时,是获取引用的变量的地址然后赋值给指针。

使用指针

Ptr本身存储的内容是地址,使用*解引用,得到地址内存储的值。

int main()
{
    int a = 100;
    int* aPtr;
    aPtr = &a;

    cout << aPtr << endl;
    cout << *aPtr << endl;
}

改变指针的值

int b = 50;
aPtr = &b;

cout << aPtr << endl;
cout << *aPtr << endl;

数组指针

int numbers[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//保存数组中第一个元素的地址
int* NumPtr = numbers;
cout << *NumPtr << endl;

指针的运算

指针可以使用加减运算符。

在数组中,自增就是移动到数组下一个元素的地址。

数组指针声明时的类型值必须和数组中元素的类型一样。

int numbers[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *NumPtr = numbers;

NumPtr++;
cout << *NumPtr << endl;
NumPtr += 3;
cout << *NumPtr << endl;

结构体指针

struct Container
{
    string name;
    int X;
    int Y;
    int Z;
};

int main()
{
    Container container = {"yuyu", 5, 6, 7};
    Container* ptrToContainer = &container;
}
  • 访问结构体指针
cout << (*ptrToContainer).name << endl;

先解引用,再用.访问

语法糖把看起来很难看的东西,变成另一种好看一些的形式。。

cout << ptrToContainer->name << endl;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值