&寻址运算符
*指针运算符
&寻址运算符与*指针运算符
具有相同的优先级,自右向左结合。
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-4 23 { 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-4 14 { 15 *p++ = i + 1; //能不能把一到5复制到数组 p是在发生变化的 16 //在一个表达式里面 p++ 就是先计算表达式的值 在给p+1 17 // ++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
下节课:
字符串和指针(数组和指针) 指针类型的数组
函数和指针
指针总结
结构体
预处理
位运算
数据结构
写项目