一、概念
/*
只要一个指针指向了数组,那么 访问数组就有3种方式
1.: age[0]
2.: p[0];
3.: *[p+0];
4.: 0[p]
*/
二、代码
#include <stdio.h>
int main()
{
/*
int num = 10;
int *numP = #
num = 55;
*numP = 100;
printf("%i\n",num);
printf("%i\n",*numP) ;
int ages[3] = {1,3,5};
// 数组名 就是数组的地址,数组的地址 就是 首元素的地址
printf("ages = %p\n",ages);
printf("&ages[0] = %p\n",&ages[0]);
// 指针是专门泳衣保存地址
// 数据类型 *变量名称
// 由于数组的首元素的地址 就是数组的地址,所以定义一个指向数组 其实就是定义一个指针指向 数组的元素,所以数组的首元素是什么类型, 那么指向数组的指针 就是什么类型
// int *p = &ages[0];
int *p = ages;
printf("p = %p\n",p);
printf("&ages[0] = %p\n",&ages[0]);
*/
// 如何利用指针操作数组
/*
int ages[3] = {1,3,5};
ages[0] = 222;
printf("ages[0] = %i\n",ages[0]);
int *p = ages; // int *p = &age[0]; &ages[0] =ages
printf("p = %p\n",p);
printf("ages = %p\n",ages); // p == age
// 因为p指针中存储的值 和ages中存储的值 相同,所以以前ages的地方 都可以使用p来替代
p[0] = 31223;
printf("p[0] = %i\n",p[0]);
for (int i = 0; i < 3; i++) {
printf("p[%i] = %i\n",i,p[i]);
}
*/
/*
int ages[3] = {1,3,5};
int *p = ages; // int *p = &ages[0];
printf("age[0] = %i\n",ages[0]);
printf("*p = %i\n",*p);
printf("p = %p\n",p);
// p = &ages[1];
// 指针 + 1 ,并不是真实的+1,而是+4
// 指针 + 1 ,其实是加上指针类型所占用的长度
// 指针类型的两个用途, 第一个用途 , 取值的时候, 会根据指针类型所占用的字节的数据 \
第二个用途, 用于加法运算, 指针+1,其实是 加上指针类型所占用的长度,如果当前 指针类型是int,那么+1本质上 是加上4个字节
p = p + 1;
printf("p + 1 = %p\n",p);
printf("*p = %i\n",*p);
p = p + 1;
// p = &ages[2];
printf("p + 1 = %p\n",p);
printf("*p = %i\n",*p);
int a = 10;
a = a + 1;
printf("a = %i\n",a); // 11
*/
/*
int num = 10;
int *numP = #
printf("num = %i\n",num);
// *numP 代表访问 numP指向的那块内存空间
printf("*numP = %i\n",*numP);
*/
/*
char c = 'a';
char *cp = &c;
printf("cp = %p\n",cp);
cp = cp + 1;
printf("cp + 1= %p\n",cp);
cp = cp + 1;
printf("cp + 1= %p\n",cp);
*/
int ages[3] = {1,3,5};
int *p;
p = ages;
/*
printf("ages[0] = %i\n",*(p+0));
printf("ages[1] = %i\n",*(p+1));
printf("ages[1] = %i\n",*(p+2));
*/
/*
for (int i = 0; i < 3; i++) {
// 指针+1 ,是加上指针类型所占用的长度
printf("ages[%i] = %i\n",i,*(p+i));
}
*/
/*
只要一个指针指向了数组,那么 访问数组就有3种方式
1.: age[0]
2.: p[0];
3.: *[p+0];
4.: 0[p]
*/
printf("ages[0] = %i\n",1[p]);
return 0;
}