/*
*左++ > * > 右++
*比如 ++ *i 相当于 ++ (*i) ,指针i对应的变量+1。
*实验如下
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int a[5];
int *ptr = a;
int i;
for(i = 0; i < 5; i++)
{
*(ptr + i) = i;
}
for(i = 0; i < 5; i++)
printf("%d addr %p\n", a[i],(ptr + i));
printf("\n");
printf("ptr is %p\n", ptr);
printf("*ptr++ %d\n", *ptr++);
printf("ptr is %p\n", ptr);
printf("(*ptr)++ %d\n", (*ptr)++);
printf("ptr is %p\n", ptr);
printf("*ptr %d\n", *ptr);
printf("ptr is %p\n", ptr);
printf("*++ptr %d\n", *++ptr);
printf("ptr is %p\n", ptr);
printf("++*ptr %d\n", ++*ptr);
printf("ptr is %p\n", ptr);
printf("\n[");
for(i = 0; i < 5; i++)
printf("%d ", a[i]);
printf("]\n");
return 0;
}
root@opcv-VirtualBox:/home/opcv/test_module/test_csafe# ./ptr
0 addr 0x7ffdc91584d0
1 addr 0x7ffdc91584d4
2 addr 0x7ffdc91584d8
3 addr 0x7ffdc91584dc
4 addr 0x7ffdc91584e0
ptr is 0x7ffdc91584d0
*ptr++ 0----------------------》打印0 ,然后改变指针地址
ptr is 0x7ffdc91584d4
(*ptr)++ 1--------------------》打印1,然后ptr指的内容+1
ptr is 0x7ffdc91584d4
*ptr 2-------------------------》打印2
ptr is 0x7ffdc91584d4
*++ptr 2----------------------》打印2,先运算++ptr,然后在取值
ptr is 0x7ffdc91584d8
++*ptr 3-------》打印3,先取内容,然后内容在++
ptr is 0x7ffdc91584d8
[0 2 3 3 4 ]
实验二 *ptr++
#include <stdio.h>
int main(void)
{
int a = 10;
int *ptr = &a;
printf("ptr %p *ptr %d \n", ptr, *ptr);
*ptr++;
printf("ptr %p *ptr %d \n", ptr, *ptr);
return 0;
}
实验结果:
root@opcv-VirtualBox:/home/opcv/test_module/test_csafe# ./ptr_1
ptr 0x7ffc8752002c *ptr 10
ptr 0x7ffc87520030 *ptr -2024669136 -------------ptr++(指针++)