1. 指针是用来装地址的数据类型,装 int 型的地址就叫整形指针,装 double 型的地址叫浮点型指针。整形是用来装整数的数据类型
2. 每一个字节都有独特的编号,对应不同的地址
int i = 10;
int *p;
p = &i;
p指针里面装的是整形变量的地址,变量有内存空间,其值可以改变
int i = 10; &i 装的是变量i所占4个字节的首地址,通过变量名i 来进行读写访问
*叫指针运算符,结合方向自右向左,它的作用是通过指针找到所指的变量来进行访问,这种访问方式叫做间接
4. 基类型指针指向将来要保存的数据类型
5. 64位系统下,指针是八字节的,32位系统下,指针是四字节的
7. 读取指针的顺序:
(1)根据指针变量中的值到内存中定位
(2)从定位开始向后偏移sizeof(基类型)字节
(3)整体地将偏移好的那部分内存当做一个基类型变量来看
8. 运算符符号叠加时的用法
int i = 10;
int *p = &i;
printf("%p\n", &*p);
printf("%d\n", *&i);
printf("%p\n", *&p);
printf("%d\n", &*i);
单目运算符自右向左,&*p 和 *&p都是输出i 的地址,*&i 输出i 的值,&*i 不能输出(* 右边的操作数只能是指针)
9. 判断电脑是小端还是大端排序
int main(void)
{
int i = 1;
char *p;
p = (char *)&i;
if(1 == *p)
{
puts("小");
}
else
{
puts("大");
}
return 0;
}
10. 交换数值的函数
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
11. 当指针置空时,不能进行访问,这是指针的一种状态
int *ret = binaryFind(a, len, -8);
if(ret == NULL)
{
puts("not found");
}
else
{
printf("%p, %d\n", ret, *ret);
}
12. 函数返回值不能返回数组,可以返回指针
13. 下面程序输出值为2,是基类型,两个指针无法进行加法,只能指针和int型进行加法,两个指针可以进行求差,但是其基类型必须相同
*p = a;
*q = a + 2;
printf("%d\n", q - p);
14. 指针在数组中的应用
void printArray(int *a, int len)
{
int i;
for(i = 0; i < len;++i)
{
printf("%d ", *(a + i));
}
printf("\n");
}