暂且是大概明白了可能的原因,不过今天已经没时间继续研究了,就先把代码贴上来吧。
(目前的考虑是和栈有关)
//
// main.c
// pointer
//
// Created by Ryza 14/11/16.
// Copyright (c) 2014年 Ryza. All rights reserved.
//
void func(int[]);
void func1(int[],int);
void func2(int,int[],int);
int main(int argc, const char * argv[]) {
int a[6] = {1,3,5,7,9,11};
int *ptr = *(&a + 1);
printf("%s:n%d,%d,%d,%dn",__PRETTY_FUNCTION__,*(a+1),*(ptr - 1),*ptr,*(a+6));
puts("");
func(a);
puts("");
func1(a, 0);
puts("");
func2(0,a,0);
return 0;
}
void func(int a1[]){
int *ptr = *(&a1 + 1);
printf("%s:n%d,%d,%d,%dn",__PRETTY_FUNCTION__,*(a1+1),*(ptr - 1),*ptr,*(a1+6));
printf("%d,%d,%d,%dn",*(a1+1),*(ptr - 3),*ptr,*(a1+6));
}
void func1(int a1[],int __unused p){
int *ptr = *(&a1 + 1);
printf("%s:n%d,%d,%d,%dn",__PRETTY_FUNCTION__,*(a1+1),*(ptr - 1),*ptr,*(a1+6));
printf("%d,%d,%d,%dn",*(a1+1),*(ptr - 3),*ptr,*(a1+6));
}
void func2(int__unused p1,int a1[],int__unused p2){
// int *ptr = *(&a1 + 1);
// this *ptr is wrong ...
// EXC_BAD_ACCESS
// printf("%s:n%d,%d,%d,%dn",__PRETTY_FUNCTION__,*(a1+1),*(ptr - 1),*ptr,*(a1+6));
// printf("%d,%d,%d,%dn",*(a1+1),*(ptr - 3),*ptr,*(a1+6));
}
输出的结果为:
int main(int, const char **):
3,11,-1372057791,-1372057791
void func(int *):
3,-218038521,1606416456,-1372057791
3,11,1606416456,-1372057791
void func1(int *, int):
3,-218038521,1606416456,-1372057791
3,11,1606416456,-1372057791