认识指针(c语言),其实指针没有你想的那么难!

  1. int a=10;
  2. int b=20;
  3. int* p=&a;
  4. *p=100;
  5. p=&b;
  6. *p=200;

是不是一头雾水呢?

如下是变量初始化:

  

如同生活中,若想找的这个学生,可以叫他名字,也可以叫他座位号。而指针就是通过“座位号”,来找学生的。


一、认识符号。

&: 

   1、取地址运算符(单目运算符);&a这里就是20909984(可以理解为座位号)。

   2、按位与运算符(双目运算符);a&b。

*:

  1、指针运算符(单目运算符),又叫解引用;*p=100(找到座位把“10”学生丢弃,“100”学生继承“10”的名字和座位号)。

  2、乘法运算符(双目运算符);2*3=6;

&与*区别:

             1、&只是得到座位号;*是通过座位号找到学生。

                 2、&和*优先级相同,但都是右结合,所以 (3.int* p=&a;&*p=p=&a; 

        (&*a) 该表达式是否正确?      

        错误!因为(1.int a=10;)a是整型变量,(知道名字可以通过名字找学生,但无法通过座位号找到学生。这是两种找学生的方法,不能混用)。

二、指针变量。

 1、定义:类型说明符 *   变量名(int* p);

2、初始化:int* p=&a;

3、使用指针变量是,注意以下几点:

  (1) int* p与*p的区别:int*是类型,*是运算符。

int a=10;

 int *p=&a;

*p=&a;(错误!)

  (2) 保证变量类型与指针类型一致;

char a; 

 int *p= &c;(错误 !)

((3)指针赋值不能为表达式的地址和常量:

int a=10;  

int b=20;  

int* p;

p=&(a+b);(错误 !)

 p=100;(错误 !)

 (4)同类指针变量可以赋值:

int a=10; 

 int* p1, *p2; //int* p1,p2;  p1为int *类型;p2为int;

p1=&a; 

 p2=p1;//p1,p2都指向a


对指针有认识了吗?来再巩固巩固吧!

  1. int a=10;          7.int* * pp=&p;
  2. int b=20;         8.*pp = &a;
  3. int* p=&a;      9.**pp = 1000;
  4. *p=100;         10.*pp = &b;
  5. p=&b;           11.**pp = 2000;
  6. *p=200;

这每一步你都知道是什么意思吗,最终a、b、*p、**pp为多少呢?


        int a=10;
int b=20;
printf("%d %d\n",a,b);
int *p=&a;    
//p的到a的地址;
*p=100;      //把a的值变为100;
p=&b;       //p得到b的地址;
*p=200;     //把b的值变为200;
printf("%d %d\n",a,b);
int * *pp=&p;     //*pp得到p的地址;
*pp=&a;          //pp得到a的地址;
**pp=1000;     //把a的值改为1000;
*pp=&b;       //pp得到b的地址;
**pp=2000;     //把b的值改为2000;

printf("a=%d, b=%d,*p=%d, **pp=%d \n",a,b,*p,**pp);

  




 

  

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值