指针
变量访问的两种方式(取值):
1.通过变量名
2.通过变量的地址(指针)
int *p;//指针变量p指向一个int类型的地址
指针变量和数组的区别(int *p、int arr[3]):
1. 指针变量指向的地址是可以变的(即p可以指向不同的整型地址),所以p++是可以的;
而数组名是一个常量(即在定义数组的时候它的地址就固定了),所以arr++不行(是给arr重新赋值)。
2. 所占的空间大小不同(sizeof())
sizeof(p) = 8;表示一个指针变量占8个字节,即每种类型的地址都占8字节(类比一个整型变量占4个字节)
sizeof(arr) = 12;表示一个数组所占的空间大小
二维数组(一维数组的每个元素又是一个数组):
int a[3][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}}
可以看成有3个一维数组a[0]、a[1]、a[2],这三个一维数组中又指向包含 4个元素的一维数组
即a是二维数组的首地址,a+1表示a[1],a+2表示a[2];a[0]+1表示a[0][1]这个地址。
int a[3] [4]= {p1,p2,p3} ; p1 = {1,3,5,7}。所以a表示的是首元素p1的地址,a+1就是p2的地址;同理p1是首元素1的地址,p1+1是3的地址
二维数组中存放的是一位数组,所以*a表示对二维数组取值,即a[0],是一维数组的首地址;*(a+1),即a[1];*a+1即等于a[0]+1