十一月二十二日记录。
数组与指针
- 一维数组与指针
当我们定义一个一维数组时,系统会在内存中为该数组分配一个储存空间,若再定义一个指针变量,并将该数组的首地址传给指针变量,则该指针就指向了这个一维数组。
int * p, a[10];
p = a;
这里的a是数组名,也是数组的首地址。
int * p, a[10];
p = &a[0];
效果与上面的一样。
我们也可以把整个数组的地址赋给指针变量,当然此时该地址指向的是整个数组。
int * p,a[10];
p = &a;
需要分辨清楚数组首地址、数组地址,数组首元素地址三个概念。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[10] = { 0 };
printf("sizeof(a) = %d\n", sizeof(a));
//打印a的长度
printf("a : %d &a : %d &a[0] : %d", a, &a, &a[0]);
//a的首地址、整个a的地址、a的首元素的地址
printf("\n");
printf("a+1 : %d &a+1 : %d &a[0]+1 : %d", a + 1, &a + 1, &a[0] + 1);
//数组首地址+1则是下一个元素的地址,整个数组的地址+1则是整个数组后的第一个地址。
printf("\n");
return 0;
}
结果如下:
- 二维数组与指针
二维数组与指针主体内容与一维数组大致相同,但是有些小区别。
- &a[0][0]既是二维数组的首地址,也是第0行0列元素的地址。&a[n][m]就是第n行m列元素的地址。
- a[0]+n表示第0行第n个元素的地址。
- &a[0]是第0行的首地址。&a[n]就是第n行的首地址。
- a+n表示第n行的首地址。
- Δ *(*(a+n)+m)表示第n行第m列元素。
- Δ *(a[n]+m)表示第n行第m列元素。
- 利用指针引用二维数组时要记住*(a+i)与a[i]是等价的。
- 字符串与指针
todo