[C/C++]数组与指针

1.数组元素名和指针都表示地址,地址可以进行加法运算,比如p+1 = a[1]的地址 p+2 = a[2]的地址,也就是说间隔是该类型的长度

2.数组名由于是地址,所以可以当做指针来用,比如a[] *(a+2) = a[2]的内容,同理,指针也可以当做数组来用,p[2] = a[2] = *(p+2) = *(a+2)

3.减法同样适用,比如指向a[5],则*(p-3) = a[2]

4.二维数组,在内存中按照1维顺序存放,(第一行,第二行,第三行的顺序)

5.区分行地址和每行第0个元素地址:二维数组名 a 代表第一行的行地址, a+1 不是第二个元素地址,*(a+1),表示第二行第0个元素的地址,而是第二行的行地址,a + 3是第三行,如果二维数组用一维表示,则a[1] = (a + 1) 即存放第二行首地址所以二维数组其实是以行为单位的3个一维数组的组合 a[0] a[1] a[2],每个一维数组还是遵从上面规则 a[0] + 1存放第一行第二个元素首地址有一个要点就是第0行的行地址和第0行第0个元素的地址,是一样的,即a=a;

6.数组指针,注意不同于指针数组,int (p)[3];这里只是定义了1个指针,只不过他的跳跃区间,是3sizeof(int)其实就是前面的a[0],a[1],a[2]这3个就是指针地址(前面称作行地址)

7.字符指针:很好理解,其实就是1维数组,只不过类型是字符类型而已 char s[]=“a string”; char *cp; cp=“a string”;

8.指针数组:主要是用于操作多组字符串变量会比较方便 int *a[10]; char *month_name(int n) { static char *name[]={ “Illegal m
onth”, “January”, “February”, “March”, “April”, “May”, “June”, “July”, “August”, “September”, “October”, “November”, “December” }; return((n<1||n>12)?name[0]:name[n]); 测试:Projects/指针与数组

你可能感兴趣的:(C/C++)