p++

问题:

请分析下面代码的输出结果:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
int main()
{   
        char*p1 = "China";
        char*p2, *p3;
 
        p2= (char*)malloc(20);
        memset(p2,0, 20);
        while(*p2++= *p1++);
        printf("%s\n",p2);
        getchar();
}

输出结果:输出为空!

 

代码的本意是将p1字符串的字符复制到p2指针所指向的内存区域。但是在语句while(*p2++ = *p1++);中,在指针p1增加的时候,指针p2也跟着增加了。所以实际上在赋值之后,p2也指向了“China”字符串的下一个地址处。

 

总结:

 

1. p指针的几种操作

++(*p):先取出p指针所指向的内容,然后自增1,当前生效;

(*p)++:先取出p指针所指向的内容,然后自增1,该语句执行后生效;

*(p++):p指针+1,取出+1之前指针指向的内容;

*(++p):p指针+1,取出+1后指针指向的内容。

 

2. malloc函数

Malloc 向系统申请分配指定size个字节的内存空间。返回类型是void* 类型。void*表示未确定类型的指针。C,C++规定,void*类型可以强制转换为任何其它类型的指针。

2.1 功能

分配长度为num_bytes字节的内存块。

2.2 返回值

如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。

2.3 说明

关于该函数的原型,在旧的版本中malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。

2.4 名称解释

malloc的全称是memoryallocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。

2.5 头文件

<stdlib.h>

 

3. memset函数

将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。

3.1 函数介绍

void *memset(void *s, int ch, size_t n);

3.2函数解释

将s中前n个字节(typedefunsigned int size_t)用 ch 替换并返回s 。

3.3 函数作用

在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。

3.4 头文件

<string.h>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值