C语言指针的一个困惑

暂且是大概明白了可能的原因,不过今天已经没时间继续研究了,就先把代码贴上来吧。
(目前的考虑是和栈有关)

//
//  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

Leave a Reply

Your email address will not be published. Required fields are marked *

two × four =