本文主要介绍了C语言的通配符指针,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。
目录
指针是什么?怎么会?什么是指针变量?指针类型是什么?指针类型存在的意义是什么?野指针出现的原因1。指针未初始化2。指针越界如何避免野指针(野狗)的出现?指针操作摘要
指针是什么?
指针只是一个名词。指针是一个地址。
当我们说指针时,我们也可以指指针变量。
怎么表示?
名称指针变量=地址;
例子:int * pa=a;
//我们这里的指针类型叫做int*,我读作(尹特星号)。
//pa是指针变量。
这个表达式的意思是:定义了一个指针变量pa,存放a .的地址,这个指针变量的类型是int*。
然后有些同学就迷茫了。什么是指针变量?
什么是指针变量?
很简单。我们之前学过如何定义整型变量A。
例如,定义a 《整型》 《变量a》,然后将a初始化为10。
int a=10
但是现在变了。我们现在已经学会了指针。
可以定义一个《int*》 《变量pa》,然后第一次把pa改成A。
注意:
Int*是一种类型。这叫指针型
Pa称为指针变量。
int * pa=a;
指针类型又是什么?
因为变量有不同的类型,比如整型,浮点型等等。
还有不同类型的指针。
char * pc=NULL
int * pi=NULL
short * ps=NULL
long * pl=NULL
float * pf=NULL
double * pd=NULL//NULL是空指针。
如你所见,指针被定义为:type *。
实际上:
char*类型的指针用于存储char类型变量的地址。
short*类型的指针用于存储short类型变量的地址。
int*类型的指针用于存储int类型变量的地址。
指针类型存在的意义
指针的类型那么多,指针类型的意义是什么?
让我们从两个重要的结论开始:
指针的类型决定了指针向前或向后移动(即地址1)的长度(可以移动多少字节)。
指针的类型决定了你在解引用一个指针的时候有多少权限(可以操作几个字节)。
比如char*(即地址加一)的指针1只能跳过一个字节,int*(地址1)的指针1可以跳过四个字节。
因为char类型占用内存1个字节,int类型占用内存4个字节。
比如char*的指针解引用只能访问一个字节,而int*的指针解引用可以访问四个字节。
不会说话,我们来看下面这个例子。
int main()
{
int n=10//定义整数变量n,初始化为10
char * PC=(char *)n;//定义字符型指针变量pc,并将其初始化为n的地址。
int * pi=n;//定义整数指针变量pi,初始化到n的地址。
printf('%p\n ',n);
printf('%p\n ',PC);
printf('%p\n ',pc1);
printf('%p\n ',pi);
printf('%p\n ',pi 1);
返回0;
}
打印结果如下,是十六进制数。可以看出,字符型的指针变量pc加1,只能操作一个字节,所以从4 ^ 1变为5。整数变量pi 1跳过4个字节,变成8。
综上所述,这就是指针类型的意义。
野指针是什么?
有些人听到百搭指针可能会好奇这个名词是什么意思。
不用担心,野指针很好理解。
当一只狗被描述为野生的时候,可以理解为野狗经常占据别人的领地或者随意出现在任何地方。
所以野指针的意思是一样的。
通配符指针是一种总是占用他人内存(地址)的指针。或者随机出现一个地址。
野指针产生的原因
一、 指针未初始化
int main()
{
int * p;//局部变量指针未初始化,默认值为random。
* p=20
返回0;}
二、 指针越界访问
#包含stdio.h
int main()
{
int arr[10]={ 0 };
int * p=arr
int I=0;
for(I=0;i=11我)
{
//当指针指向的范围超出数组arr的范围时,P为通配符指针
*(p)=I;
}
返回0;}
如何避免野指针(野狗)的出现呢?
初始化指针(就是把野狗拴在一个地方,防止它随便占别人的地盘)
注意越过线的指针(绑住流浪狗,以免挣脱绳子)
指针运算
减去指针以获得两个指针之间的元素数。
摘要
本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。