指针知识点归纳

指针运算

初始化: int a,*p  ; p=&a;  or    int a, *p=&a;

p=&a, *p=10(代表把10赋值给a)

printf("%d",*p)

scanf("%d",p)

空指针: p=NULL

赋值方式:直接赋值 a=b;间接赋值:a=*p

注意: “*” 代表的是“解”符号;在实用指针之前,必须要有指向;指针变量的初值必须为 ”地址值“

eg: char *p=" i love china"在指针上,字符串就是一个地址。

字符串注意点:1.只要说明了是字符串,说明该字符串末尾一定有一个结束字符'\0'  2.利用strlen 计算长度时,不算上 结束字符的长度。所以实际长度:实际字符个数+1。 3.定义的时候可以不用写明长度:char string[]=" i love china";

这里可以让 p 直接指向 字符串地址, p="i love china"; 若要修改字符串:char str[20],*p=str;  gets(str);

  • 注意:当 定义: char str[]=.....  p=str   则可以: *p= " abcdef"   若  这样定义: char *p=" abcedf"   则不可以这样改: *p= "asdqwe"
  • 注意:字符串在改动结束后,末尾一定要加上 '\0'

•     删除字符串给定字符:char f  while(d[i]!='\0'){ if(d[i]!=f)  d[k++]=d[i] i++  }   d[k]='\0'

在定义字符数组的时候:1.char string[]="i am a boy" 或者 char string[20]; gets(string)  

定义:如果为整型指针*p,则该指针必须只可以指向同类型变量,同理float型。

强制类型转换:double d,*q=&d; p=(int *)q

注意:在利用指针变量进行值的交换的时候,用该形式:p=*p1;*p1=*p2;*p2=p;

指针关系运算符只有指向同类才有意义

①:p==q(比较是否都指向同一个位置);②:p>q(比较所指位置的先后顺序); 注意: 若用if ,while 语句进行判断:是 :1   否: 0   。③:p-q 表示 指针之间的元素个数:eg: p=a,q=&a[5]; 则q-p=5。

指针求最大最小(擂台法):p=a;max=min=*p;for(.....) if(*p>max)  max=*p ; if(*p<min)    min=*p;

数组名就是首地址常量,a[10].a==&a[0];在指针指向中,则让:p=a;(就是p=&a[0]);          移动指向位置:①(一维):*(p+i);②(二维):*(*(p+i)+j);   不可对数组名(a)进行 加减,赋值;而指针是个变量,所以可以。

这里的指向移动涉及到for循环;

或者每一次循环进行p++;要注意的是,循环完毕后,p的位置要复位:p=a;

注意;p++与++p

eg:输入:for(i=0;i<10;i++,p++) scanf("%d",p);输出:for(p=a,p<a+10;p++) printf("%d",*p);

二维的另一种表现形式: *(p[i]+j))

取地址运算符:&   取内容运算符:  *

注意:*p++(* 和 ++ 是同级运算符,是从右到左运算!)

eg: char *p=" c language” for(;*p!'\0';) putchar(*++p);   所以该字符 直接从 空格处开始输出。  

  • 注意:putchar getchar     ->  putchar(a); c=getchar();        puts gets -> char a[10]
         gets(a);puts(a);

注意换行:printf("\n");

指针数组

 int *p[6], 说明数组里的每一个元素都是指针类型;改写:  int (*p)[6](一维), 该数组(这个整体为指针)

二维指针数组: a[2][3],*p[2], 则*p[0],*p[1],分别指a数组的 第一行,第二行 元素!  运算: p[i]=a[i];

  • 指针数组输入:scanf("%d",p[i]+j);  scanf("%d",p[i][j])
  • 输入二维字符串,char a[2], for(i=0;i<2;i++)  scanf("%s",a[i]);   注意: 字符串 的输入与输出 都是 a[i]形式!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值