再忆起C/C++
当前位置:以往代写 > C/C++ 教程 >再忆起C/C++
2019-06-13

再忆起C/C++

再忆起C/C++

C已经放下好久了,大一学的基本语言,之后学C++,学/用VC好长一段时间,直到大三 上Java毕设用Java,然后是直到4个月前一直用Java/J2EE的对象,此刻又改用了C#。

呵呵,看起来学了不少语言。

虽说编程语言都是相通的,确实如此,先前学的为厥后打下了基本。可是,各门语言 到细处照旧有许多差异的,现用现学吧。

此刻又是谋事情的时候了,论坛里处处是笔经、面经、笔试题,等等,又忙起来了( 呵呵,不是我)

为什么又想到C/C++了呢?因为被冲击了,下面这题(笔经中的)没做对:

int main(int argc, char *argv[])
{
int a[]={1,2,3,4,5};
int* p=(int*)(&a+1);
cout << "a = " << *(a+1) << endl;
cout << "p = " << *(p-1)<< endl;
return 0;
}

谜底是啥:

a = 2

p = 1

恭喜你,答错了!

心里哇凉哇凉的!!!

正确谜底:

a = 2

p = 5

原因:

&a是数组指针,其范例为 int (*)[5];而指针加1要按照指针范例加上必然的值, 差异范例的指针+1之后增加的巨细差异。a是长度为5的int数组指针,所以要加 5*sizeof(int),所以p实际是a[5]。可是p与(&a+1)范例是纷歧样的(这点很重要)所 以p-1只会减去sizeof(int*)

留意:a,&a的地点是一样的,但意思纷歧样,a是数组首地点,也就是a[0]的地点 ,&a是工具(数组)首地点,a+1是数组下一元素的地点,即a[1],&a+1是下一个 工具的地点,即a[5].

    关键字:

在线提交作业