**
一点点记录,不是教学
**
/* 下面说了那么多,越看越晕,不看也行。
* 总结就是
* 想要指向变量a的指针 那就 int * p= &a; 而普通变量名a不是地址,要加取地址符&
* 用法 *p == a;
* 想要指向数组a[]的指针 那就 int * p= a; 因为数组的名字a就是地址
* 用法 p[i] == a[i]; 相当于给数组a的名字换成了p
**/
//
// Created by Tony on 2023/12/10.
//
#include <stdio.h>
int main(){
/* 下面说了那么多,越看越晕,不看也行。
* 总结就是
* 想要指向变量a的指针 那就 int* p= &a; 而普通变量名a不是地址,要加取地址符&
* 用法 *p == a;
* 想要指向数组a[]的指针 那就 int* p= a; 因为数组的名字a就是地址
* 用法 p[i] == a[i]; 相当于给数组a的名字换成了p
**/
/*变量指针的定义与使用
* 下面两种写法是等价的
* int a;
* int* p = &a;
* 和
* int a;
* int* p;
* p = &a;
* 等价,写法不同
* */
int a = 123;
int *p1=&a;
*p1 = 654; /*相当于修改了a的值为654*/
// printf("a=%d\n",a);
int b = 231;
int *p2;
p2 = &b;
/*数组指针的定义与使用*/
/* C语言让指针指向数组的两种方法
* 第一种方法:将指针指向数组名
* 第二种方法:将指针指向数组的第一个元素的地址
* 这两种方法都可以的原因是数组的第一个元素的地址就是数组的地址
*
* */
int a1[]={1,2,3};
int *pa,*pb;//定义两个指针
pa=a1;//指针pa直接指向数组名
pb=&a1[0];//指针pb指向数组a的第一元素的地址
// printf("pa=%p\n",pa);
// printf("pb=%p",pb);
/*C语言 数组的指针和指向数组的指针变量*/
/* 对于数组a[] 来说 int* p = a; 和 int* p = &a 的区别
* 说实话没区别,a 和 &a 数值上都是同一个地址,意义不同而已*/
int arr[3]={31,24,74};
/*指向数组的指针变量*/
int* p3 = arr; /*arr存放的是数组首元素的地址*/
/* 使用指针读取数组 p3[2] 和 *(p+2) 是等价的,写法不同而已,
* 都是表示 数组arr[]的第3个元素 */
printf("数组指针p3[2] = %d\n",p3[2]);
printf("数组指针*(p3+2) = %d\n",*(p3+2));
int* p4 = &arr; /*会报黄色警告*/
printf("数组指针p4[2] = %d\n",p4[2]);
/*数组的指针*/
int (*p5)[3] = &arr;
printf("数组指针*(*p5+2) = %d\n",*(*p5+2));
/*
* 注意&arr 和 arr虽然数值上相等,都是地址,但意义不同
* arr指的是这个数组的 第一个元素 的首地址。
* &arr 指的是这 整个数组 的首地址。
* */
return 0;
}