About the Pointer - 1

关于C语言中的指针问题,无数次都感觉自己已经OK了,其实每一次碰见都感觉有陌生的地方,可能是个人对知识没有深入理解造成的。有预感这会是一个很长的系列:

最近在看Computer Systems: A Programer's Perspective,在强制类型转换中有一段代码,涉及到指针强转,数据类型定义,指针常量和常量指针等较为混淆的概念:

#include<stdio.h>
#include<string.h>

typedef unsigned char * byte_pointer;

void show_bytes(byte_pointer start, int len)
{
        int i;
        for(i = 0; i < len; i++)
        {
                printf(" %.2x",start[i]);
        }
        printf("\n");
}


void show_int(int x)
{

        show_bytes((byte_pointer)&x,sizeof(x));

//取址运算符创建了一个指针,&x创建了一个指向保存变量x的位置指针。

//&x的指针类型为 int  *

}


void show_float(float x)
{
        show_bytes((byte_pointer)&x, sizeof(x));

//&x的指针类型为 float  *
}


void show_pointer(void *x)
{

        show_bytes((byte_pointer)&x,sizeof(x));

//&x的指针类型为 float  *

}


void main()
{
        char *str = "today";
        const char *s = "abcdef";
        char const *sconst = "ABCDEF";
        char * const pcs = "free";
        int val = 0x87654321;
        float fval;

        byte_pointer valp = (byte_pointer)&val;

        s = str;
        sconst = str;
        *pcs = "abcd";  //something is wrong!
        show_bytes((byte_pointer)str,strlen(str));
        show_bytes((byte_pointer)s, strlen(str));
        show_bytes((byte_pointer)sconst,strlen(sconst));
        show_bytes((byte_pointer)pcs,strlen(pcs));
        return;

}


typedef:数据类型命名,可以改善代码的可读性,深度嵌套的类型声明很难读懂。

typedef unsigned char * byte_pointer;

byte_pointer 等价于unsigned char *;





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值