引入:未能解决的问题:两数互换
变量的内存地址:内存中的每个字节都有唯一的编号(地址)
例scanf("%d,&a)意思是把输入的值存放在变量a的地址上去 {%p打印地址 &a}
学会指针之前先整明白地址
指针变量的定义和初始化:指针应先定义再使用
指针变量-具有指针类型的变量 变量的指针-变量的地址
int a=0;
int *pa;定义了指针变量pa,但pa并未指向a--初始化(pa本身有个地址,如果指向a存的就是a的地址,如果没有指向,说明pa里面是空的)
int *pa;
pa=&a;(*pa==a)
指针可以解决 指针传参的时候可以传多个,而函数返回值只有一个,可以在函数里面对主函数多个变量直接进行修改
指针和一维数组的关系: p=a或p=&a[0]
指针可以当数组名使用 p=a a[ ] p[0],p[1],p[2] 数组名就是指针 例a[i]=*(a+i)=pa[i]=*(pa+i)
指针和二维数组的关系:
a[0],a[1]代表二维数组的首地址,*(a+i) *a(a+i)+j *(*(a+i)+j)
重要 二维数组的行指针:int a[2][3].....定义:int(*p)[3] 使用:p=a 输出:(*(p+i)+j)或p[i][j]..指针名当数组名 注意定义的二维数组的大小列很重要,定义多少用多少
二维数组的列指针: int a[2][3].....定义:int *p 使用:p=*a 输出:p[i*n+j]或*(*p+i*n+j).....二维当一维
指针数组:定义:元素均为指针类型数据的数组。char [5][20] char *ptr[5]..二维的字符串数组指针数组更多的用来指向一个字符串数组(每一个指针指向一个串)使用p[i]=a[i] char ch[20]是一个一维数组...char *p就是一个字符串指针,可以只想一个单字符,还可以指向一个一维的字符串数组