数组名作为函数参数传递时, 传递的是数组首元素的地址, 类型为数组元素同类型的指针. 这样就可以方便对数组内任一元素进行访问和修改.
数组名, 不作为函数参数时,代表的是整个数组, 虽然数值和数组首元素的地址值相同 ,但表示的意义却并不相同
指针有类型, 而类型是说明指针指向地址处可以访问和操作的内存大小, 如 int arr[5]; arr表示这块内存开始的整体大小
同样指向数组元素的指针和指向数组的指针当然意义也是不一样的
- //
- #import <Foundation/Foundation.h>
- void test(int *pArray)
- {
- NSLog(@"%p", pArray);
- }
- int main(int argc, const char * argv[])
- {
- int arr[5] = {0};
-
- NSLog(@"sizeof(arr) = %ld", sizeof(arr)); // 数组的大小 这里arr代表整个数组
- NSLog(@"sizeof(&arr) = %ld", sizeof(&arr)); // 数组首地址的大小
- NSLog(@"sizeof(&arr[0]) = %ld", sizeof(&arr[0])); // 数组首元素地址的大小
-
-
- NSLog(@"%p", &arr); //表示数组开始的地址
- NSLog(@"%p", arr); // 表示数组第一个元素的地址
- NSLog(@"%p", &arr[0]); // 同上表示数组第一个元素的地址
- test(arr); // 同上数组名作参数 传入的是数组第一个元素的地址
-
- int *p = arr; // 指向数组首元素的指针 这里的arr代表首元素的首地址
- int (*p2)[5] = &arr; // 指向数组的指针 这里的&arr表示数组的首地址
- NSLog(@"p = %p p2 = %p", p, p2);
-
-
- p += 1; // p = p + sizeof(数组元素类型)*1 ----> p = p + 4
- p2 += 1;// p = p + sizeof(数组)*1; -----> p = p + 20
- NSLog(@"p = %p p2 = %p", p, p2);
-
-
- return 0;
- }
复制代码
|