指针与整数相加减:
int age[8] = {…};
int *p = &age;数组的本质上就是一个地址,第一个元素的地址就是数组的地址
p = p + 2;
cout << *p; 输出为数组的第三个元素
(指针加减会在数组中左右移动 n 个位置,但地址会变化 n x sizeof ( type ) 个地址:p = p + n --> p原地址 + n x sizeof ( type ) )
int *p = &age[6];
p = p - 2;
cout << *p; 输出为数组的第五个元素,即倒数第四个元素
指针与指针相加减:
int *p1 = age[5];
int *p2 = age[3];
p1 - p2 = 2;
p2 - p1 = -2;
指针与指针相加没有意义。
指针与指针相减必须是在同一个数组中,如果不在同一个数组中,那么相减就没有意义,但也会得到一个值,这个值就是两个地址相减的值,是没有意义的。
const 指针:
int const *p; 指针 p 可以指向其他变量,但不能修改变量的值
int *const p; 指针 p 可以修改变量的值,但不能指向其他变量
void 指针:
int arr[ ] = {1,2,3,4,5};
char ch = ‘a’;
void *p = arr; //定义了一个void 类型的指针
//p++; //不可以, void 指针不允许进行算术运算
p = &ch; //其它类型可以自动转换成void 指针
//printf (“数组第一个元素:%d \n”,*p); //不可以进行访问
void 类型的指针,没有初始的类型,但可以初始化指向,在进行访问时,需要确定的指定它的类型才能进行访问。
数组指针:
指向的是数组中的元素
定义一个数组指针,这个数组里面的每一个元素都是一个指针变量,每一个指针变量都可以指向其他数组的每一个元素的地址。
int age[3] = {…};
int *p[2]; 数组指针
p[0] = &age[0]; 或者 p[0] = &age[1]; 或者 p[0] = &age[2];
p[1] = &age[1]; 或者 p[1] = &age[2]; 或者 p[1] = &age[0];
指针数组:
指向的是二维数组的一整个一维数组
定义一个指针数组,这个数组里面的每一个元素都是一个指针变量,每一个指针变量都可以指向其他数组的每一个元素的地址。
int age[3][4] = {
{11,12,13,14},
{21,22,23,24},
{31,32,33,34}};
int (*p)[4]; 数组指针
p = &age[0]
此时的数组指针指向二维数组中的 age[0] = {11,12,13,14} 这一整个数组。
记录一下,以免忘记。