第26课 指针的本质分析

2020/2/28 16:15:27

本文主要是介绍第26课 指针的本质分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

*号的意义
·在指针声明时,*号表示所声明的变量为指针
·在指针使用时,*号表示取指针所指向的内存空间中的值

例子:
#include"stdio.h"
int main()
{

int i = 5; 
int *p =&i;
printf("%d,%p\n",i,p);
*p = 10;   
printf("%d,%p\n",i,p);
return 0;

};
输出结果:
5,00EFFEA40
10,00EFFEA4

指针也是变量,变量就有地址,指针也可以取地址

变量P保存着变量i的内存地址,即:
p→&i
*p→i

例子26-1:

include"stdio.h"

int main()
{

int i = 0;
int* pI;
char* pC;
float* pF;

pI = &i;
*pI = 10;
printf("%p,%p,%d\n",pI,&i,i);
printf("%p,%p,%d\n",sizeof(int*),sizeof(pI),&pI);
printf("%p,%p,%d\n",sizeof(char*),sizeof(pC),&pC);
printf("%p,%p,%d\n",sizeof(float*),sizeof(pF),&pF);
return 0;

};
输出结果:
0056F808,0056F808,10
00000004,00000004,5699580
00000004,00000004,5699568
00000004,00000004,5699556
指针变量只需要4个字节的变量存取,而且int char float 类型的指针变量都是4个字节

传值调用与传址调用
·指针是变量,因此可以声明指针参数
·当一个函数体内部需要改变实参的值,则需要使用指针参数
·函数调用时实参值将复制到形参
·指针适用于复杂数据类型作为参数的函数中
例子26-2:

include"stdio.h"

int swap(int a,int b)
{

int c = a;
a = b;
b = c;

}
int main()
{

int aa = 1;
int bb = 2;
printf("aa = %d,bb = %d\n",aa,bb);
swap(aa,bb);
printf("aa = %d,bb = %d\n",aa,bb);
return 0;

}
输出结果:
aa = 1,bb = 2
aa = 1,bb = 2
函数分析:输出结果没有变化是因为swap(aa,bb);将值给了a,b,并没有参与运算,只是简单的传值调用。

改26-2:

include"stdio.h"

int swap(int a,int b)
{

int c = *a;
*a = *b;
*b = c;

}
int main()
{

int aa = 1;
int bb = 2;
printf("aa = %d,bb = %d\n",aa,bb);
swap(&aa,&bb);
printf("aa = %d,bb = %d\n",aa,bb);
return 0;

}
输出结果:
aa = 1,bb = 2
aa = 2,bb = 1
函数分析:
传址调用,传的是地址,就能改变aa,bb的地址。

常量与指针
·const int* p; //p可变,p指向的内容不可变
·int const* p; //p可变,p指向的内容不可变
·int* const p; //p不可变,p指向的内容可变
·const int* const p //p不可变,p指向的内容不可变
口诀:左数右指
当const出现在*号左边时指针指向的数据为常量
当const出现在*后右边时指针本身为常量

例子26-3:

include"stdio.h"

int main()
{

int i = 0;
const int* p1 = &i;
int const* p2 = &i;
int* const p3 = &i;
const int* const p4 = &i;

*p1 = 1;  //error
p1 = NULL;

*p2 = 1;  //error
p2 = NULL;

*p3 = 1;
p3 = NULL; //error

*p4 = 1;   //error
p4 = NULL; //error

}
小结:
·指针是C语言中一种特别的变量
·指针所保存的值是内存的地址
·可以通过指针修改内存中的任意地址内容



这篇关于第26课 指针的本质分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程