认识指针(c语言),其实指针没有你想的那么难!
- int a=10;
- int b=20;
- int* p=&a;
- *p=100;
- p=&b;
- *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
对指针有认识了吗?来再巩固巩固吧!
- int a=10; 7.int* * pp=&p;
-
int b=20; 8.*pp = &a;
- int* p=&a; 9.**pp = 1000;
- *p=100; 10.*pp = &b;
- p=&b; 11.**pp = 2000;
- *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);