#include<stdio.h>
int main(void) {
int urn[5] = { 100, 200, 300, 400, 500 };
int * ptr1, * ptr2, * ptr3;
ptr1 = urn;
ptr2 = &urn[2];
printf("urn[5] = { 100, 200, 300, 400, 500 },\nptr1 = urn,\nptr2 = &urn[2]\n\n");
printf("The size of urn is %zd bytes\n\n", sizeof urn);
printf("pointer value, dereferenced pointer, pointer address:\n");
printf("ptr1 = %p, *ptr1 = %d, &ptr1 = %p\n\n", ptr1, *ptr1, &ptr1);
printf("指针加法 ptr3 = ptr1+4:\n");
ptr3=ptr1+4;
printf("ptr1+4 = %p(内存urn[1]的机器地址往后挪了4个单元=增加了16个字节,转换为十六进制,地址加10(0x)), *(ptr1+4) = %d\n", ptr1+4, *(ptr1+4));
printf(" ptr3 = %p, *ptr3 = %d\n\n", ptr3, *ptr3);
printf("递增指针ptr1++:增加一个储存单元,4个字节\n");
ptr1++;//递增指针
printf("ptr1 = %p, *ptr1 = %d, &ptr1 = %p\n\n", ptr1, *ptr1, &ptr1);
printf("ptr2 = %p, *ptr2 = %d, &ptr2 = %p\n", ptr2, *ptr2, &ptr2);
printf("递减指针ptr2--:\n");
ptr2--;
printf("ptr2 = %p, *ptr2 = %d, &ptr2 = %p\n\n", ptr2, *ptr2, &ptr2);
printf("恢复初始值--ptr1;++ptr2;:\n");
--ptr1;
++ptr2;
printf("ptr1 = %p, ptr2 = %p\n\n", ptr1, ptr2);
printf("用一个指针减去另一个指针,必须是同一数组内的指针\n");
printf("ptr2 = %p, ptr1 = %p, ptr2-ptr1 = %td(相隔2个数组元素的类型int,不是字节)\n\n",ptr2, ptr1, ptr2-ptr1);
printf("用一个指针减去一个整数\n");
printf("ptr3 = %p, ptr3-2 = %p\n",ptr3, ptr3-2);
printf("*ptr3 = %d, *(ptr3-2) = %d\n",*ptr3, *(ptr3-2));
return 0;
}
2021-4-19 指针的运算
最新推荐文章于 2022-11-12 17:14:27 发布