一、指针:
1、定义:类型 * 指针变量名;
int a[5] = {1, 2, 3, 4, 5};
int * ptr = a;
2、使用方式:
(1)指针方式:ptr+1 指向元素2的存储地址,*(ptr+1)的值为2。
(2)下标方式:ptr[1] 内容是2
二、数组:
1、定义:类型 数组名[元素个数]
int a[5] = {1, 2, 3, 4, 5};
2、使用方式:
(1)指针方式:a+1表示第二个元素的存储地址, *(a+1)的值为2。
(2)下标方式:a[1]内容是2。
3、说明:
(1)a:代表的数组a的首元素的地址,是一个常量,不能a++。
(2)&a:代表的是整个数组的地址。
(3)*a:代表的是a[0]。
(4)&a+1:代表的第二维的首地址,即使不存在,但是的确指示的是a[5]的地址。
三、数组指针与指针数组
[]的优先级比*高。
1、数组指针:
(1)它是一个指针,指向的是一个数组,它是“指向一个数组”的指针的简称。
(2)形式:int (*ptr)[10];
例子:
//
// main.cpp
//
#include <stdio.h>
int main(void)
{
int a[5] = {1, 2, 3, 4, 5};
int (*ptr)[5] = &a;
printf("%d\n", *ptr[0]);
printf("%d\n", *(ptr[0]+1));
printf("%d\n", *(ptr[0]+2));
printf("%d\n", *(ptr[0]+3));
printf("%d\n", *(ptr[0]+4));
return 0;
}
执行结果为:
说明:
(1)ptr指向数组a;
(2)int (*ptr)[ ],[]中的值必须与所指向的数组元素个数相同,否则出错;
(3)ptr指向的是整个数组的起始地址;ptr+1 地址+sizeof(int)*5
2、指针数组:
(1)它是一个数组,这个数组中的每个元素都是指向int型变量的指针,它是“指针的数组”的简称。
(2)形式:int *ptra[10];