本文共 1892 字,大约阅读时间需要 6 分钟。
int array[10] = {1,2,3};//for (int i = 0; i < array.length; i++) {for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++) { cout << "array[" << i << "].address=" << &array[i] << endl;}
array[0].address=00CFF7F0
array[1].address=00CFF7F4 array[2].address=00CFF7F8 array[3].address=00CFF7FC array[4].address=00CFF800 array[5].address=00CFF804 array[6].address=00CFF808 array[7].address=00CFF80C array[8].address=00CFF810 array[9].address=00CFF814
从上面可以看出每个int占用4个字节
int array1[] {1,3,5,7,9,11}; int* p1 = array1; int i = 0; cout<< "p1["<<<"]=" << *p1 << ",address["<<<"]=" << p1<< endl; i=i+1; p1 = p1+1; cout<< "p1["<<<"]=" << *p1 << ",address["<<<"]=" << p1<< endl; i=i+1; p1 = p1+1; cout<< "p1["<<<"]=" << *p1 << ",address["<<<"]=" << p1<< endl; i=i+1; p1 = p1+1; cout<< "p1["<<<"]=" << *p1 << ",address["<<<"]=" << p1<< endl; i=i+1; p1 = p1+1; cout<< "p1["<<<"]=" << *p1 << ",address["<<<"]=" << p1<< endl; i=i-1; p1 = p1-1; cout<< "p1["<<<"]=" << *p1 << ",address["<<<"]=" << p1<< endl;
p1[0]=1,address[0]=0x7ffeefbff4b0
p1[1]=3,address[1]=0x7ffeefbff4b4
p1[2]=5,address[2]=0x7ffeefbff4b8
p1[3]=7,address[3]=0x7ffeefbff4bc
p1[4]=9,address[4]=0x7ffeefbff4c0
p1[3]=7,address[3]=0x7ffeefbff4bc
多数情况下,c++将数组名解释为数组的第1个元素的地址。
// c++11int array1[] {1,3,5,7,9,11}; cout << "array1[0].addess=" << array1 << endl;cout << "array1[0].addess=" << &array1[0] << endl;# 最初的时候,下面的地址是一样的array1 == &array1[0]
array1[0].addess=0x7ffeefbff4b0
array1[0].addess=0x7ffeefbff4b0
p1和*p1,前者是地址,后者是存储在该地址的值。由于p1指向第1个元素,因此*p1显示的值为第1个元素的值,即1.
接下来将p1加1.这样p1的值为第2个元素的地址。因此,*p1现在的值是3.
以此类推。
int array1[6] = {[3]=10};printf("=======================================\n");for(int i=0;i< sizeof(array1)/sizeof(array1[0]);i++) { printf("array1[%d]=%d \n",i,array1[i]);}
array1[0]=0
array1[1]=0 array1[2]=0 array1[3]=10 // notice array1[4]=0 array1[5]=0
转载地址:http://yexwb.baihongyu.com/