一、定义:
1.指针定义:
指针是由能存放一个地址的一组存储单元 (通常是两个或四个字节 )构成。(《C语言程序设计》)。
指针是一个值为内存地址的变量(或数据对象)正如char类型变量的值是字符,指针变量的值是地址。(《C Primer Plus》)
感觉第二种更容易理解,指针是变量 和char int类似。
2.& 取地址符:只能应用于内存中的对象(变量和数组),不能是表达式、常量或寄器 变量(《C语言程序设计》)
3.*间接寻址(间接引用,取值运算符):它将访问指针所指向的对象。
int *p 与*p的区别
int a=0;
//int *p 与*p的区别
int *p=&a;
*p=a;
//对比
int b=1;
b=2;
//定义和运算时赋值类型都相同 而*p在 int *p=&a;中赋值为地址 *p=a; 中赋值为int类型的数
//这是因为*在不同位置的意思不同,
//在 int *p为定义指针 所以接收的值是指针
//在 *p中的*是取值运算符,代表的是p指针中的值
4.指针与地址的关系:
指针也有多种类型的。话不多说上代码。
//指针类型
char *c;
int *i;
float *f;
double *d;
//指针对应的数据类型
char c1;
int i1;
float f1;
double d1;
//拿c来距离 c与&c1类型大小相等 存储的都是地址 *c与c1类型大小相等存储的都是值
//c1直接通过地址找到值 *c是先根据c中存的地址找到对应的内存在找到值
printf("c=%d,&c1=%d,*c=%d,c1=%d\n",sizeof(c),sizeof(&c1),sizeof(*c),sizeof(c1));
printf("i=%d,&i1=%d,*i=%d,i1=%d\n",sizeof(i),sizeof(&i1),sizeof(*i),sizeof(i1));
printf("f=%d,&f1=%d,*f=%d,f1=%d\n",sizeof(f),sizeof(&f1),sizeof(*f),sizeof(f1));
printf("d=%d,&d1=%d,*d=d,d1=%d\n",sizeof(d),sizeof(&d1),sizeof(*d),sizeof(d1));
下图红线为*c的查找方式。