C/C++:[10]指针、数组和指针算术

2024-10-14 13:08:13

我们知道将整数变量加1后,其值会增大1,那么将指针变量加1后,其值会增大多少呢?在探讨这个问题同时我们也将学习到指针和数组的关系。

C/C++:[10]指针、数组和指针算术

2、可以看到上面三个输出结果是一样的,也就意味着将一个数组赋给指针后,数组的地址、数组首元素的地址和指针的地址,三者是一样的。

二、指针运算

1、我们知道将数组的下标加1就表示数组中下一个元素,那么将一个指向数组的指针加1后,指针指向什么呢?在VS2012中编写如下测试代码: int 足毂忍珩iArray[3]={1, 2, 3}; double dArray[3]={1.1, 2.2, 3.3}; int * pi = iArray; double * pd = dArray; cout << "iArray[0] = " << iArray[0] << endl; cout << "*Pi = " << *pi << endl; cout << "&iArray[0] = " << &iArray[0] << endl; cout << "Pi = " << pi << endl; cout << "iArray[1] = " << iArray[1] << endl; cout << "*(Pi+1) = " << *(pi+1) << endl; cout << "&iArray[1] = " << &iArray[1] << endl; cout << "Pi + 1 = " << pi+1 << endl; cout << "\ndArray[0] = " << dArray[0] << endl; cout << "*Pd = " << *pd << endl; cout << "&dArray[0] = " << &dArray[0] << endl; cout << "Pd = " << pd << endl; cout << "dArray[1] = " << dArray[1] << endl; cout << "*(Pd+1) = " << *(pd+1) << endl; cout << "&dArray[1] = " << &dArray[1] << endl; cout << "Pd + 1 = " << pd+1 << endl;会输出什么?

C/C++:[10]指针、数组和指针算术

2、从上面的输出结果可以看出:1、数组的地址和数组首元素的地址相同;2、将数组收元素的地址加1和数组第二个元素的地址相同。这里有一点有点出乎我的意料,就是我对整个数组的地址加1,结果竟然是第二个元素的地址,我的理解是地址应该偏移整个数组的大小(可以看下面的测试),而不是一个元素的大小,这可能和编译环境和操作系统有关,不知在Linux下结果如何,有兴趣的可以自己测试

3、在VS2012中编写如下测试代码: int iArray[3]={1, 2, 3}挢旗扦渌; cout << "iArray = " << iArray << endl; cout << "&iArray[0] = " << &iArray[0] << endl; cout << "sizeof(iArray) = " << sizeof(iArray) << endl; cout << "sizeof(&iArray[0]) = " << sizeof(&iArray[0]) << endl;输出结果是什么呢?

C/C++:[10]指针、数组和指针算术

4、从上面的结果可以看出:虽然整个数组的地址和数组首元素的地址相同,但是其长度是不同的,对整个数组的地址使用sizeof()得到整个数组占用内存的大小,而对对数组的首元素地址使用sizeof()得到该元素占用内存的大小。

猜你喜欢