指针(仅供参考)

一、指针与指针变量

(1)

Int *p=&a;//p是地址(指针,有点像中断程序的入口地址,可以通过&p得到),*p是值(指针变量)

如图解释:(设定为32位系统,4字节一个指针)

 

指针是指向指针变量的地址,指针变量是指向变量的地址。(有点像间接寻址)

指针都是存放4个或8个字节,与类型无关,与系统的寻址能力有关。(譬如以前是16为地址,指针即为2个字节,现在一般是32位系统,所以是4个字节,以后64位,则就为8个字节)

(2)例子

char *pa=&a;// 获取变量a的地址存在指针变量pa中 。&是取地址符号。

printf("a=%c\n",*pa); //                               *是取值运算符

printf("the addr of a is :%p\n",pa);//注意打印地址的字符是p,p是打印地址类型的数据

c是打印单个字符,s是打印字符串)

(3)要避免访问未初始化的指针,超级危险

最好定义的时候就初始化

int mian(){

int *a;//自定义,没有初始化

*a=123;

return 0;}//像未初始化的变量一样会随机分配,但是指针随机分配的地址,可能会分配到系统程序区的地址,(编译器可能会报错),还有会分配到不是你像要的地址。

二、指针和数组

(1)回顾上节:p已经是地址的,在用scanf输入的时候不需要取地址符号,输入字符串流中也不需要加入取值符号,字符串本身就是字符数组,且数组名是首元素地址。

(2)如何用一个指针指向数组?

       将数组的首地址存入指针变量中:

Int a[128];

Int *p=a; or int *p=&a[0];

指针运算就可以访问其他

(3)也可以直接通过指针法来访问数组,无需定义,只要在数组名前加上*

char p[]="FishC";

       printf("*p=%c  ,*(p+1)=%c\n",*p,*(p+1));

      

(4)

       float d[]={1,2,23,1,5};

       float *f=d;     

       printf("*p=%d  ,*(p+1)=%d\n",*f,*(f+1));//p+1是指将数组元素加一访问,而不是单纯加一

       printf("第一个数的地址:%p\n",f);

       printf("第二个数的地址:%p\n",f+1);

(5)用指针定义字符串,用数组下标访问字符串

        char *str="I love fish";

        int i,len;

        len=strlen(str);//可以提高效率 ,减少函数调用次数

        for(i=0;i<len;i++){

             printf("%c",str[i]);

        }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值