【3-1-27】指针左值指针与整数指针空指针以及指向为空的指针

总结:A:左值就是能放在等号左边能赋值的值,B:指针变量是左值,是因为它是变量,而不是因为它似指针,C:通过强制转换的方式,把地址转换成指针,D:void 指针和空指针,空指针就判定一下是否指向一地址


1:指针的概念和拓展


void main200()
{
int a = 5;//能放在赋值号左边赋值的值叫左值
int *p = &a;//p是一左值,因为p是一指针变量,重要的是它是变量,而不是指针,
int *const px;//px是一指针常量,不可以被赋值
*p = 3;//指针变量,以及指针指向的数据,除非是常量,能被赋值都是左值
}

2:指针与整数,指针的地址和整数有什么关系呢?


//如何通过scanf对这个指针初始化,并且对这个指针改变这个数据呢?
void main201()
{
int a = 10;
int b = 20;
printf("%p,%p\n",&a,&b);
//我们传入了b的地址,改变了它的值,它是一个整数,那怎么通过整数的方式对它实行初始化呢?
int *p;
int x;//p是一指针,x仅仅是一地址所代表的整数,
scanf("%d", &x);//输入一个16进制的整数
p = (int *)x;//对p进行赋值,要强制转换,将地址转换为指针,需要类型的转换,直接输入一个整数,把这个整数赋值给一个指针,然后通过一个指针改变一个变量,
//scanf("\n%p",&p);//用键盘输入初始化指针变量
*p = 3;
printf("\na=%d,b=%d\n",a,b);
//那怎么通过整数的方式对它实行初始化呢?下面

system("pause");
}

3:void指针与空指针


//void 类型的指针可以传递地址比如下面的
void *p1 = p2;
p1 = p3;
//void 类型的指针,由于指向不明确,大小不确定,所以无法取出内容,
printf("%d", *p1); 
//转换就可以了
printf("%d", *((int *)p1));//空指针加上类型在取出内容
要把它用于某种类型的指针,需要强制转换


void main203()
{
//void 不指向任何一个明确类型,只有一个地址,仅仅知道你从哪里开始,不知道从哪里结束呢?这个时候就没有办法取出里面的内容
//用空指针可以接收任何指针类型的地址,void类型指针主要起到一个地址传递的作用,
int a = 10;
double b = 20.8;
int *p2 = &a;
double *p3 = &b;
void *p1 = p2;
p1 = p3;
printf("%d",*p1);//错误。因为//void 不指向任何一个明确类型,只有一个地址,仅仅知道你从哪里开始,不知道从哪里结束呢?这个时候就没有办法取出里面的内容

system("pause");
}

分配内存 malloc
malloc();大家想想它的返回值是什么呢?它的返回值是一空指针,为什么返回值是一空指针?
因为它在这里就起到一传递地址的作用,我们可以把它转换成任何类型的指针,

传递地址 malloc()

4:空指针

//一个指针为空意味这什么?
判断指针是否指向一个地址,为空就不指向任何地址
void main204()
{
int *p = NULL;//没有初始化
int num = 20;
p = #//有对象了
if (p==NULL)
{
printf("指针没有初始化,是单身,可以追求");
}
system("pause");
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值