&寻址运算符
*指针运算符
&寻址运算符与*指针运算符
具有相同的优先级,自右向左结合。
int a;
Int *p=&a;
*&a---->a
&*p---->p
int *p=&a;
指针的赋值:
声明的时候:赋值int *p=&a;
先声明再赋值:int a; int *p; p=&a;
*p单独出现的时候是数据。
int *p 前面带有数据类型。
一、一维数组和指针。
1、一维数组地址。
就是数组第一个元素的地址。
1 #include2 3 int main()4 {5 int arr[5];6 printf("%d\n", &arr[0]);7 8 return 0;9 }
定义一个指针,把一维数组的首地址&a[0]赋予这个指针ptr,就说ptr指向数组a[5]。
一个数组的数组名就是这个数组的首地址。arr[5] &arr[0] == arr == ptr
2、对一维数组进行输入和输出。
A、指针不发生改变。
1 #include2 3 int main() 4 { 5 //int arr[5]; 6 7 //for (int i = 0; i < 5; i++) 8 //{ 9 // arr[i] = i + 1;10 //}11 12 13 //for (int i = 0; i < 5; i++)14 //{15 // printf("arr[%d]=%d\n", i, arr[i]);16 //}17 18 19 int arr[5];20 int *p = arr; // int *p=&arr[0];21 22 for (int i = 0; i < 5; i++) //i 0-423 {24 //只要指针变量声明完之后 p就是地址 *p就是陪这个地址指向的变量。25 *(p+i) = i + 1; //arr[0]--*p arr[1]--*(p+1) arr[2]--*(p+2)26 }27 28 29 for (int i = 0; i < 5; i++)30 {31 printf("arr[%d]=%d\n", i, *(p + i));32 }33 }
*只有在声明的是时候表示是指针,其他任何情况单独出现* 都表示指针运算符。
B、在对数组索引是,指针p发生改变,那么在打印之前必须把p重新指向数组的首地址。
1 int arr[5]; 2 int *p = arr; // int *p=&arr[0]; 3 4 5 /******************************** 6 1: *p -- arr[0] 1 7 2: *(p+1) -- arr[1] 2 8 3: *((p+1)+1) -- arr[2] 3 9 ********************************/10 11 printf("赋值之前:%d\n", p);12 13 for (int i = 0; i < 5; i++) //i 0-414 {15 *p++ = i + 1; //能不能把一到5复制到数组 p是在发生变化的 16 //在一个表达式里面 p++ 就是先计算表达式的值 在给p+117 // ++p 先给p+1 再计算表达式的值18 }19 20 printf("赋值之后:%d\n", p);21 22 for (int i = 0; i < 5; i++)23 {24 printf("arr[%d]=%d\n", i, arr[i]);25 }26 27 28 p = &arr[0]; //把p重新指向数组的首地址29 printf("打印之前:%d\n",p);30 31 32 for (int i = 0; i < 5; i++)33 {34 printf("arr[%d]=%d\n", i, *p++);35 }36 37 printf("打印之后:%d\n", p);
建议:遇见指针:1、这个指针的指向类型? 2、这个指针指向哪里? 3、指针自己的类型?
二、二维数组和指针。
1、二维数组的地址。
首地址:
&a[0][0] a[0] &a[0] a &a
行地址:
1、第0行的地址就是首地址
2、第1行 &a[1][0] a[1] &a[1] a+1
3、第2行 &a[2][0] a[2] &a[2] a+2
4、第i行 &a[i][0] a[i] &a[i] a+i
蓝色的加法就加一维数组的字节数 橙色的加法加数据类型的字节数
通过行地址去找到n行m列的元素。
&a[n][m] a[n]+m (关键是要搞清楚 以一维数组老做判断 还是以整体的二维数组来进行判断 )
//n行m列的元素
*(a[n]+m)
*(*(a+n)+m) //a+n a[n] *(a+n) a[n]+m
下节课:
字符串和指针(数组和指针) 指针类型的数组
函数和指针
指针总结
结构体
预处理
位运算
数据结构
写项目