蚌埠百度做网站,新办公司网上核名在哪个网站做,深圳网站快速优化公司,在线设计平台的市场调研C中将递增和递减运算符用于指针
指针包含内存地址。例如#xff0c;程序中的 int 指针包含 0x002EFB34——int 在内存中的地址。 int 本身长 4 字节#xff0c;因此占用 0x002EFB34#xff5e;0x002EFB37 的内存。将递增运算符用于该指针后#xff0c;它指向的并不是 0x00…C中将递增和递减运算符用于指针
指针包含内存地址。例如程序中的 int 指针包含 0x002EFB34——int 在内存中的地址。 int 本身长 4 字节因此占用 0x002EFB340x002EFB37 的内存。将递增运算符用于该指针后它指向的并不是 0x002EFB35因为指向 int 中间毫无意义。 如果您对指针执行递增或递减运算编译器将认为您要指向内存块中相邻的值并假定这个值的类型与前一个值相同而不是相邻的字节除非值的长度刚好是 1 字节如 char。
int age 30;
int* pointsToInt age;因此 对于上面的程序中的指针 pointsToInt 对其执行递增运算将导致它增加4字节 即sizeof(int)。将用于该指针相当于告诉编译器您希望它指向下一个 int因此递增后该指针将指向 0x002EFB38。同样将该指针加 2 将导致它向前移动两个 int即 8 字节。在本文后面您将看到指针和数组索引之间的关系。 使用运算符–将指针递减的效果类似将指针包含的地址值减去它指向的数据类型的 sizeof。
将指针递增或递减的结果将指针递增或递减时其包含的地址将增加或减少指向的数据类型的 sizeof并不一定是 1 字节。这样编译器将确保指针不会指向数据的中间或末尾而只会指向数据的开头。如果声明了如下指针Type* pType Address;则执行pType 后 pType 将包含指向 Address sizeof(Type)。 以下示例程序演示了对指针递增和添加偏移量的结果
#include iostream
using namespace std;int main()
{cout How many integers you wish to enter? ;int numEntries 0;cin numEntries;int* pointsToInts new int [numEntries];cout Allocated for numEntries integers endl;for(int counter 0; counter numEntries; counter){cout Enter number counter : ;cin *(pointsToInts counter); }cout Displaying all numbers entered: endl;for(int counter 0; counter numEntries; counter)cout *(pointsToInts) ;cout endl;// return pointer to initial positionpointsToInts - numEntries;// done with using memory? release delete[] pointsToInts;return 0;
}输出
How many integers you wish to enter? 2
Allocated for 2 integers
Enter number 0: 8774
Enter number 1: -5
Displaying all numbers entered:
8774 -5再次运行的输出
How many integers you wish to enter? 5
How many integers you wish to enter? 5
Allocated for 5 integers
Enter number 0: 543
Enter number 1: 756
Enter number 2: 2017
Enter number 3: -101
Enter number 4: 101010012
Displaying all numbers entered:
543 756 2017 -101 101010012分析
这个程序询问用户想输入多少个整数再在第 9 行相应地分配内存。这个程序演示了两种递增指针的方法一是使用偏移量如第 15 行所示它使用偏移量变量 counter 将用户输入直接存储到内存单元中二是使用运算符如第 20 行所示它将指针包含的地址递增让指针指向下一个元素。 第 1216 行的 for 循环让用户输入数字然后使用第 15 行的表达式将其存储到相邻的位置。这个表达式给指针增加从零开始的偏移量 counter。第 19 和 20 行的 for 循环与此类似它显示前一个循环存储的值。 调用 delete[]来释放内存时必须指定分配内存时 new 返回的指针地址。这个值最初存储在 pointsToInts 中但第 20 行的运算符 修改了 pointsToInts因此第 25 行使用运算符 - 让 pointsToInts 重新指向原来的地址再在第 28 行对这个地址调用 delete[]。
该文章会更新欢迎大家批评指正。
推荐一个零声学院的C服务器开发课程个人觉得老师讲得不错 分享给大家LinuxNginxZeroMQMySQLRedis fastdfsMongoDBZK流媒体CDNP2PK8SDocker TCP/IP协程DPDK等技术内容 点击立即学习C/C后台高级服务器课程