C语言---指针
Posted 小鹿可可乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言---指针相关的知识,希望对你有一定的参考价值。
1.一级指针
1.1指针定义
计算机中所有数据都必须放在内存中,为了正确访问这些内存,必须给每个字节编上号码,像门牌号,每个字节编码都是唯一的,内存中字节编号称为地址或指针
- 指针用来存放地址
- 最小的地址:0X0000 0000
- 最大的地址:0XFFFF FFFF
- 程序能够使用的内存为4GB
- 在指针定义中,*号和变量名结合
1.2指针的种类
- 空指针
int *s=NULL;
- 野指针
int *p;
- 失效指针
1.3图解指针
int a = 10, b = 20;
int *ip = NULL;//* 声明ip是指针 空给ip
ip = &a;//把a 的地址给ip &*ip<=>&a
*ip = 100;//a=>100
ip = &b;//把b的地址给ip
*ip = 200;
- ip = &a;
-
ip存放谁地址,解引用就是谁本身
-
使用指针变量首先要明确指针变量自身的值(存储的是地址),再明确指针变量所指的实体(解引用)。
1.4类型对指针变量起到2个作用
1,解析存储单元的大小
2,指针变量加1的能力
int main()
{
const int n = 5;
double ar[5] = { 1.2, 2.3, 3.4, 4.5, 5.6 };
double*p = &ar[0];
for (int i = 0; i < n; ++i)
{
printf("0x%08x =>%f \\n", p, *p);
p = p + 1;//p+=1;p++;++p;
}
}
1.5指针的应用
- 值传递(形参的改变不会影响到实参的值)
void Swap_a(int a, int b)
{
int c = a;
a = b;
b = c;
}
int main()
{
int x = 10, y = 20;
Swap_a(x, y);
printf("%d\\n%d\\n", x, y);
return 0;
}
- 指针传递(实参的地址传递给形参,才会改变实参的值)
void Swap_b(int *ap,int *bp)
{
int c = *ap;
*ap = *bp;
*bp = c;
}
int main()
{
int x = 10, y = 20;
Swap_b(&x, &y);
printf("%d\\n%d\\n", x, y);
return 0;
}
- 想改变某个变量的值必须有动作(赋值)存在,
2.二级指针
如果指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针
2.1图解二级指针
假设有一个int类型变量a,p1指向a的指针变量,p2又是指向p1的指针变量,它们的关系如图:
代码关系:
int a = 100;
int *p1 = &a;
int *p2 = &p1;
2.2指针关系
int a = 10, b = 20;
int *ip = &a;
int **sp = &ip;
int ar[10] = {}; //sizeof(ar); type+num
ip = ar; //ar =>&ar[0];
int(*par)[10] = &ar;//type+num 存放数组的地址
//定义par指针,开辟四个字节空间,指向大小为10,类型为int的数组
int *pbr[10];//开辟10个空间(40个字节),每个空间是整型类型的指针
int*(*sbr)[10] = &pbr;
3.函数指针
函数指针的本质是是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针。
函数类型两部分构成:返回类型+形参列表
int fun(int, int);//函数声明
//函数指针
int(*pfun)(int, int);//定义一个pfun指针指向一个参数都为int类型的函数,返回类型int
3.1一个代码示例
int Add_Int(int a, int b)
{
return a + b;
}
int Sub_Int(int a, int b)
{
return a - b;
}
int main()
{
int(*pfun)(int, int) = nullptr;//函数指针变量的定义
int x = 10, int y = 20;
int z = 0;
//pfun = &Add_Int;
pfun = Add_Int;//与上面等价
z = Add_Int(x, y);
z = pfun(x, y); //new
z = (*pfun)(x, y);//old
pfun = Sub_Int;
z = (*pfun)(x, y);
return 0;
}
调用过程:
-
Add_Int; 函数首元素地址 Add_Int(); 调动此函数
-
函数指针不能用sizeof计算函数指针所指之物大小,不能+1;
-
无类型指针也不能计算大小 void
以上是关于C语言---指针的主要内容,如果未能解决你的问题,请参考以下文章