本文在C语言学习笔记——指针(一)的前提下,就某些关于指针的问题,进行进一步的讨论。
一、不同表达式下,指针的偏移量
不同表达式下,指针的偏移量是不一样的!
请看下面示例。
- 例1:
- 不同表达式下,指针的偏移量
- 测试代码如下:
#include<stdio.h>
void main(int argc, char const *argv[])
{
//定义一个int型一维数组以及二维数组
int a[5] = {1,2,3,4,5};
int b[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
int (*p)[5] = &a;
printf("一维数组:\n");
printf("================\n");
printf("a = %p\n",a);
printf("&a[0] = %p\n",&a[0]);
printf("&a = %p\n",&a);
printf("================\n");
printf("a+1 = %p\n",a+1);
printf("&a[1] = %p\n",&a[1]);
printf("&a+1 = %p\n",&a+1);
printf("================\n");
printf("二级指针 指向 一维数组:\n");
printf("int (*p)[5] = &a;\n");
printf("p = %p\n",p);
printf("*p = a = &a = &a[0] = %p\n",*p);
printf("================\n");
printf("(*p)+1 = a+1 = &a[0]+1 = &a[1] = %p\n",(*p)+1);
printf("p+1 = %p\n",p+1);
printf("================\n");
printf("二维数组:\n");
printf("b = %p \n",b);
printf("b[0] = %p\n",b[0]);
printf("&b[0][0] = %p\n",&b[0][0]);
printf("&b = %p\n",&b);
printf("================\n");
printf("b+1 = %p \n",b+1);
printf("b[1] = %p\n",b[1]);
printf("&b[1][0] = %p\n",&b[1][0]);
printf("b[0]+1 = %p\n",b[0]+1);
printf("&b+1 = %p\n",&b+1);
return ;
}
输出结果,如图所示:
- 在一定意义上,数组就是指针,指针就是数组。一级指针对应一维数组、二级指针对应二维数组。
- 接下来用两张图来分别一维数组以及二维数组解释对应的输出结果:
- 一维数组:
- 二维数组:
希望本文,能帮助大家进一步理解指针与数组!