废话不多说,直接上错误代码:
static void print_cpu_src(uint8_t * src,int stride){ int i,j; printf("Magnum cpu src addr == %p, stride ==%d: ",&src,stride); for (i = 0; i < 11; ++i) { printf(" "); for (j =0; j < 4; ++j) { printf("%d ,", src[j]); } src += stride; printf("new src addr %p ",&src); } printf(" "); }
输出结果:
Magnum cpu src addr == 000000000022F4C0, stride ==800:
129 ,124 ,122 ,124 ,new src addr 000000000022F4C0
130 ,125 ,122 ,125 ,new src addr 000000000022F4C0
132 ,125 ,123 ,125 ,new src addr 000000000022F4C0
132 ,126 ,123 ,125 ,new src addr 000000000022F4C0
151 ,127 ,124 ,126 ,new src addr 000000000022F4C0
151 ,127 ,125 ,126 ,new src addr 000000000022F4C0
153 ,128 ,125 ,127 ,new src addr 000000000022F4C0
154 ,128 ,125 ,127 ,new src addr 000000000022F4C0
157 ,129 ,125 ,127 ,new src addr 000000000022F4C0
158 ,129 ,125 ,127 ,new src addr 000000000022F4C0
161 ,130 ,125 ,128 ,new src addr 000000000022F4C0
每次输出的地址值都是一样的,自然想到其实输出的是指针变量的地址值,指针变量是没有变化的变化的是指向的内存地址。
修改,新的代码如下:
static void print_cpu_src(uint8_t * src,int stride){ int i,j; printf("Magnum cpu src addr == %p, stride ==%d: ",(int)src,stride); for (i = 0; i < 11; ++i) { printf(" "); for (j =0; j < 4; ++j) { printf("%d ,", src[j]); } src += stride; printf("new src addr %p ",(int)src); } printf(" "); }
总结:
其实指针 *src, src 就是指向的地址值,直接打印它即可