指针
一、指针的类型
(1)int*ptr 指针的类型是int*,它可以指向一个int类型
(2)char*ptr 指针的类型是char* 可以指向一个char类型
二、指针的运算
1. +,-,*,\,%,++,--都能做
#include<stdio.h> int main() { int a=10,b=20; int *pa=&a, *pb=&b; printf("%d\n", *pa+*pb); printf("%d\n", *pa-*pb); printf("%d\n", *pa**pb); printf("%d\n", *pa/(*pb)); printf("%d\n", ++*pa); printf("%d\n", --*pb); }
2. 指针指向数组时做的一些运算
在单纯使用数组时,不能对整个数组做运算,但是使用指针数组后,就多了些不同之处
#include<stdio.h> int main() { int array[20]={0}; int *p=array; int i; for(i=0;i<20;i++) { ++*p;\\对数组中每个元素做+1的运算 p++;\\ 指针指向数组中下一个元素 } for(i=0;i<20;i++) printf("%d", array[i]); }
三、指针与数组
1.指针与一维数组
例如:
#include<stdio.h> int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; int *p; p=a;//相当于 p=&a[0],由此可知数组名代表的是数组首元素的地址 for(int i=0;i<10;i++) printf("%d\n", p+i);//p+i相当a+i,即&a[i] printf("\n"); for(int i=0;i<10;i++) printf("%d\n", *(p+i));//(*p+i)相当于a[i] }
2.指针与二维数组
①
int a[n][m]
二维数组就是包含n个元素,a[0],a[1],a[2],每个元素都是一个包含四个整型元素的数组
②
使用指针遍历二维数组
(1)与一位数组不同的是,数组名a表示&a[0], a[0]才表示二维数组的第一个元素a[0][0]的地址,即&a[0][0]
(2)a+i 等价于*(a+i), a[i]; *(a+i)+j 等价于 a[i]+j
(3)*(*(a+i)+j)或者*(a[i]+j)相当于a[i][j]
总结:进入指针的学习后,内容变得相对复杂,难度也有所上升,要理清指针的运用方式