#include <stdio.h> int main() { /********************************************* * * 指针和数组: * 定义数组:数组名就是数组第一个元素的地址 * int ages[5]; * int *p; * p = ages; * 访问数组元素的方法: * 1、数组名[下标] ages[i] * 2、指针变量名[下标] p[i] * 3、*(p + i) * * 指针变量+1,地址值究竟加多少,取决于指针的类型 * int * 4 * char * 1 * double * 8 * **********************************************/ int arr[5] = {1,2,3,4,5}; //指针变量此时指向的是数组的首元素 int *p = arr; printf("数组名[下标]访问数组元素: "); for (int i=0; i<5; i++) { printf("arr[%d] = %d ", i, arr[i]); } printf("指针变量名[下标]访问数组元素: "); for (int i=0; i<5; i++) { printf("arr[%d] = %d ", i, p[i]); } printf("*(p + i)访问数组元素: "); for (int i=0; i<5; i++) { printf("arr[%d] = %d ", i, *(p + i)); } printf("指针变量+1,地址值究竟加多少,取决于指针的类型: "); int c = 10; float d = 11.0f; double e = 12.0; char f = 'A'; int *pi = &c; float *pf = &d; double *pe = &e; char *pch = &f; printf("int类型的指针加1的地址: "); printf(" int类型当前地址是:%p ",&c); printf(" int类型加1后地址是:%p ",pi + 1); printf("float类型的指针加1的地址: "); printf(" float类型当前地址是:%p ",&d); printf(" float类型加1后地址是:%p ",pf + 1); printf("double类型的指针加1的地址: "); printf(" double类型当前地址是:%p ",&e); printf(" double类型加1后地址是:%p ",pe + 1); printf("char类型的指针加1的地址: "); printf(" char类型当前地址是:%p ",&f); printf(" char类型加1后地址是:%p ",pch + 1); return 0; }
数组名[下标]访问数组元素: arr[0] = 1 arr[1] = 2 arr[2] = 3 arr[3] = 4 arr[4] = 5 指针变量名[下标]访问数组元素: arr[0] = 1 arr[1] = 2 arr[2] = 3 arr[3] = 4 arr[4] = 5 *(p + i)访问数组元素: arr[0] = 1 arr[1] = 2 arr[2] = 3 arr[3] = 4 arr[4] = 5 指针变量+1,地址值究竟加多少,取决于指针的类型: int类型的指针加1的地址: int类型当前地址是:0022feb8 int类型加1后地址是:0022febc float类型的指针加1的地址: float类型当前地址是:0022feb4 float类型加1后地址是:0022feb8 double类型的指针加1的地址: double类型当前地址是:0022fea8 double类型加1后地址是:0022feb0 char类型的指针加1的地址: char类型当前地址是:0022fea7 char类型加1后地址是:0022fea8