指针问题
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 一维数组
int array[4] = {10, 20, 30, 40};
int *p1 = array;//指向元素的指针,指向4个字节的空间
int (*p2)[4] = &array;//指向数组的指针,指向16个字节的空间
// 虽然存储地址一样,但是p1,p2代表的含义完全不同
// 可以这样认为
// array = &array[0]
// 数组名==首元素的地址==认为是指向首元素的指针
NSLog(@"p1 = %p,p2 =%p",p1,p2);
// p1 = 0x7fff5fbff760,p2 =0x7fff5fbff760
NSLog(@"p1 + 1 = %p,p2 + 1= %p",p1+ 1, p2 + 1);
// p1 + 1 = 0x7fff5fbff764,p2 + 1 =0x7fff5fbff770
NSLog(@"array =%p,&array = %p", array, &array);
// array = 0x7fff5fbff760,&array =0x7fff5fbff760
NSLog(@"array + 1 =%p,&array +1 = %p", array + 1, &array +1);
// array + 1 = 0x7fff5fbff764,&array +1 =0x7fff5fbff770
int *p3 = (int *)(&array + 1);
NSLog(@"p3 = %p,*p3 =%d",p3,*(p3-1));
// p3 = 0x7fff5fbff770,*p3 = 40
double *p4 = (double *)(&array + 1);//double决定p4的跨度
NSLog(@"p4 = %p,p4 - 1 =%p,*p4 = %d",p4, p4-1, *(int *)(p4 - 1));//int决定取数据取多少个字节
// p4 = 0x7fff5fbff770,p4 - 1 =0x7fff5fbff768,*p4 = 30
char *p5 = (char *)(&array + 1);
NSLog(@"p5 = %p,p5 - 1 =%p",p5,p5-1);
// p5 = 0x7fff5fbff770,p5 - 1 =0x7fff5fbff76f
// 二维数组
int a[2][3] = {{10, 20 ,30},{100, 200, 300}};
// a[0];//a[0][0]的地址,指向a[0][0]元素的地址,指向4个字节的空间
// a[1];//a[1][0]的地址,指向a[1][0]元素的指针,指向4个字节的空间
// a;//a[0]的地址,指向a[0]的指针,指向12个字节的空间
// &a;//a的地址,指向a的指针,指向24个字节的空间
int (*p6) = (int *)(a + 1);
NSLog(@"p6 = %p,p6 - 2 =%d",p6, *(p6 - 2));
// p6 = 0x7fff5fbff74c,p6 - 2 = 20
}
return 0;
}