朱老师您好!
发现您有个习惯,每次输出地址的时候都用%#x,如下所示!
int main(int argc, char*argv[]) { int a[8][8]= {1,2,3,4}; int(*ptr1)[8] = a ; int(*ptr2)[8][8] = &a; int*ptr3 = &a[0][0]; printf(" ptr1 = %#xn" , ptr1); printf(" &a[0] = %#xn" , &a[0]); printf(" ptr1+1 = %#xn" , ptr1+1); printf(" &a[0]+1 = %#xnn" , &a[0]+1); printf(" ptr2 = %#xn" , ptr2); printf(" &a = %#xn" , &a); printf(" ptr2+1 = %#xn" , ptr2+1); printf(" &a+1 = %#xnn" , &a+1); printf(" ptr3 = %#xn" , ptr3); printf(" &a[0][0] = %#xn" , &a[0][0]); printf(" ptr3+1 = %#xn" , ptr3+1); printf(" &a[0][0]+1 = %#xnn" , &a[0][0]+1); return 0; 这个在Unbutu环境下会有warning出现,并提示类型不匹配。因为%#x匹配的为unsigned int,但是ptr1为int (*)[8]类型(以printf(" ptr1 = %#xn" , ptr1)为例说明)!但运行结果没问题!如果把%#x改为%p就没有warning出现。 这个warning的出现只是一个和运行环境有关的小问题,无伤大雅!我运行的环境是Ubuntu,出现了这个warning,在您的运行环境下肯能就不会出现warning!
|