C/C++指针的数据类型与指针运算小结

3 篇文章 0 订阅

1.指针的数据类型小结

有关指针的数据类型

2.指针的运算

 a.指针变量的赋值

将变量的a的地址赋给指针p--代码如下:

int a;
int *p;
p=&a;

将数组元素的首地址赋给指针p--代码如下:

int a[3]={1,2,3};
int *p;
p=a;

将数组中的元素的地址赋给指针p

int a[3]={1,2,3};
int *p;
p=&a[2];

f为已定义的函数,将函数的入口地址赋给指针p--代码如下:

int f(int z)
{
  cout<<"z"<<endl;
}


int main()
{
    int f(int z);
    int (*p)(int z);
    p=f;
    p(6666);
}

指针与指针之间的赋值,p1与p2为相同类型的指针--代码如下:

int a=2;
int *p1=&a;
int *p2=p1;

b.指针变量的赋值空值

指针变量可以赋空值,表示不指向任何变量--代码如下:

int *p=NULL;

NULL代表整数0,即就是让指针p指向地址单元为0,这样表示指针不指向任何单元,在系统中定义如下:

#define NULL 0

在C++中 include<iostream>头文件中包含了NULL的定义,NULL为符号常量。

注意:

指针p的值为NULL和p未被赋值是两个不同的概念。前者表示是有值得为0,不指向任何的变量,后者虽然未对指针p赋值并不等于

p无值,它只是一个无法预料的值,可以认为p可以指向任意一个没有被指的对象。这种情况非常的危险。因此,在引用变量之前

一定要对指针赋值。

任何指针变量或者地址都可以与NULL做相等或者不相等的比较:

if(p==NULL)
p=p1;

// 或者改写为下面的的
if(!p)
p=p1;

还需要注意:

int *p=NULL,int *p和*p=NULL的区别:

int *p=NULL和int *p上面已经说明,可以去看上面,*p=NULL表示:使p所指向的变量为0,因为p所指向的指向不确定,不适

有时候,将指针p赋值为0,养成好习惯。用用时让p=NULL。

c.指针变量的赋值应该注意的问题

基类型相同的不同的指针变量之间可以赋值,不同的基类型的变量之间不可以赋值。如下:

//错误代码
int *p1,i=2;
double *p2,j=5;
p1=&i;
p2=&j;
p1=p2;

但是可用通过强制类型可以实现上面的赋值;

p1=(int*)p2;

d.指针变量加/减一个整数

例如:

p++;
p--;
p+i;
p-i;
p+=i;
p-=i;

C/C++中规定,一个指针变量的加/减一个整数是将该指针变量的原值(原来指向的地址)和它指向的变量所占用的内存单元字节数相加或者相减。

如p+i;代表这样的地址计算:p+i*d,d是p所指向的变量单元所占用的字节数。这样才能保证p+i指向p下面的第i个元素

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花雨仙晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值