本章内容:
1.什么是指针
2.指针的定义
3.指针的应用
4.指针的运算
5.指针与数组的关系
6.指针和数组,函数的示例
7.二级指针
1.什么是指针?
计算机中所有的数据必须存放在内存中,不同类型的数据占用的字节不一样,例如,int占用了4个字节,char占用1个字节。为了能准确的访问这些数据,给字节编上了号码,编的号是唯一的,根据编的号码可以快速找到数据,我们称这些编号为地址,也就是指针。
最低的地址为0x00000000 最高的地址为0xFFFFFFFF
注意:
(1) 在当前计算机中数据通常都是小端存放
小端存放是指数据的低位保存在低地址,数据的高位保存在高地址
(2)*号在C中的含义:
2.定义指针变量
指针变量其实与普通变量相似,不过要在变量名前加星号*
格式为 数据类型 *变量名:*号表示这是一个指针变量
总结:指针就是 内存的地址,指针变量就是保存内存的地址。指针的大小在32位平台上是4个字节大小,在64位平台是8个字节
指针变量自身的值存储的地址,指针变量所指的实体(解引用)
定义指针变量时,类型对指针变量起到两个作用 1)解析存储单元的大小 2)指针变量加1的能力
3.指针的应用
3.1值传递
#include<stdio.h>
void Swap(int a, int b)
{
int tmp = 0;
tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 10;
int b = 20;
Swap(a, b);
return 0;
}
3.2指针传递,指针和函数
指针的传递,根据地址的传递进一步进行值的传递
//判断当前计算机是大或小端存放
#include<stdio.h>
int main()
{
int x = 1;
char* p = (char*)&x;
if (*p == 1)
{
printf("小端存放\n");
}
else
{
printf("大端存放\n");
}
return 0;
}
4.指针的运算:
1)指针+-整型(不可以是浮点型)
2)指针+指针
3)指针-指针
4.1类型对指针+1的影响
1) 指针+1,就相当于指向下一个地址
指针的类型不同,加1的能力不一样
如:typename*p;
p=p+1;会被编译器解释成:p=p+sizeof(typename)*1
2)指针和整型加减后的结果仍然是指针类型
4.2类型对指针解引用操作的影响
不同类型之间解引用操作必须要加上类型的强制转换
4.3指针-指针运算
两个同类型指针,指向连续空间可以相减,减后的结果是数据元素的大小
当且仅当两个同类型指针变量指向同一数组中的元素时,可以用关系运算符>,==,!=等进行比较,比较规则是指向后面元素的指针高,指向同一元素的相等
4.4关于*和&之间的谜题
如:int a=10;int *pa=&a;
假设有一个int类型的变量a,pa是指向它的地址,那么*&a和&*pa,*&pa是什么意思
*&a:&a是变量a的地址,*是解引用操作,*&a就是变量a本身
&*pa:*pa是pa指向的数据(a),&(*pa)表示数据的地址等价于(&a),所以&(*pa)等价于pa
*&pa:&pa是指针的地址,对指针的地址进行解引用就是指针本身
失效指针
由于数据在栈中的存放是连续的,在函数进行调用时,fun函数可能会被print_ar函数中的数据填充所以打印出来的时数组的随机值