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解引用,这个地址已经超越边界了,但是以上代码还是编译通过并成功运行了。本来正常情况下,数组的内存中存放着都是整数,但是经过计算后,将函数存放在越界后的某个地址上,其实就可以悄无声息的运行自己的代码了,见下面的截图。