5、C与C++指针、数组及标准库深度解析

C与C++指针、数组及标准库深度解析

1. 标准C中的指针与数组

在标准C里,指针是一个变量,其值指向内存中的某个位置。但标准C的问题在于,这个内存位置并不与特定类型关联,而是由指针类型本身来定义其所指向内存的类型。

int main(void)
{
    int i;
    int *p = &i;
}

在上述示例中,我们创建了一个整数 i ,接着创建了一个指针 p 并让它指向 i 。不过,我们还能这样操作:

int main(void)
{
    int i;
    void *p = &i;
    int *int_p = p;
    float *float_p = p;
}

此程序中,我们创建了一个指向整数的指针,但将其类型定义为 void * ,这告知编译器我们创建的是一个无类型指针。随后,我们又创建了两个额外的指针,一个指向整数,另一个指向浮点数,这两个指针都用之前创建的 void * 指针进行初始化。

这里存在问题,标准C编译器会进行自动类型转换,将 void * 转换为整数指针和浮点数指针。若同时使用这两个指针,可能会以以下几种方式导致数据损坏:
- 依据不同架构,可能会发生缓冲区溢出,因为整数可能比浮点数大,反之亦然,这取决于所使用的CPU。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值