c++学习之数组

        c++数组的定义实例如下:            

       int array[] = {1,200,3,4,6};
        c++的数组是个非常底层的东西,它不能感知自己的容量,也就是说,在java中频繁使用的length,size()等,在c++数组中,均派不上用场。因此很多在形参为数组的函数中,总会有第二个参数,也就是数组的容量。

        数组元素的访问用下面的方式,参考代码,这是最常规的一种访问了。

        int array[] = {1,200,3,4,6};
	for(int i=0;i<5;i++)
	    cout << array[i] << endl;
         c++数组的变量名为该数组的首地址,我们可以参考如下代码:

         

        在传参的时候,如果需要传递数组的话,往往在函数原型中定义为该数组类型的指针即可了。

void changeArray(int *pbegin);
int main()
{
	int array[] = {1,200,3,4,6};
	cout << "before changed is : " << *array << endl;
	changeArray(array);
	cout << "after changed is :" << *array << endl;	
	return 0;
}

void changeArray(int *pbegin)
{
	*pbegin = 1000;	
}

        最后记录一下传说中的数组越界和缓冲区溢出攻击吧。这个也是我从其他博客中学习到的。看如下代码:

        

void changeArray(int *pbegin);
int alert();
int main()
{
	int array[] = {1,200,3,4,6};
	cout << "before changed is : " << *array << endl;
	changeArray(array);
	cout << "after changed is :" << *array << endl;	
	return 0;
}

void changeArray(int *pbegin)
{
	*(pbegin+10) = alert();
}

int alert()
{
	cout << "I am here" << endl;
	return 1000;
}
        我们在changeArray函数中,将pbegin解引用,这个地址已经超越边界了,但是以上代码还是编译通过并成功运行了。本来正常情况下,数组的内存中存放着都是整数,但是经过计算后,将函数存放在越界后的某个地址上,其实就可以悄无声息的运行自己的代码了,见下面的截图。


        

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值