码迷,mamicode.com
首页 > 其他好文 > 详细

关于typedef的用法总结

时间:2015-01-28 21:06:48      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

 

 

http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html

 

 

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

// AP是指向长度为5的char数组的指针(数组指针),可简单讲是属于二级指针
typedef char (*AP)[5];

AP defy(char *p)
{
    int i;
    for(i=0;i<3;i++)
        p[strlen(p)]=A;
    return (AP)p+1;
}
int main()
{
    // char a[][5]
    char a[]="FROG\0SEAL\0LION\0LAMB";
    puts(defy(a)[1]+2);
    return 0;
}

// output: ONALAMB
AP是指向长度为5的数组的指针,可简单讲是属于二级指针,return (AP)p+1是语法上看起来别扭的用法,p不是二级指针,但含义被强制转成了每5个字符一组的二级数组,并且返回第二个子组,也就是说p与a一样,指向数组中最前面的‘F‘,但返回值是指向以第5个字符‘S‘开头的子组的指针,也还是二级指针(而且函数defy还把p数组的3个‘\0‘都改成了’A‘,也就是把所有子组全都用‘A‘连在一起了),puts(defy(a)[1]+2)在返回值defy(a)的基础上defy(a)[1]又是取第二个子组,即指向的是字符‘L‘开头的子组,但这回是踏踏实实的了,得到的是char[5]这样的普通含义的字符串指针,简单说defy(a)[1]就指向‘L‘了,后面再+2是跳过2个字符,改指向‘O‘了,puts输出从‘O‘开始的字符串,注意因为defy做的改写,“O”和后面的“LAMP”被’A‘连在一起了。 整个很别扭的根本原因是char a[] = 这里,干脆把它改成char a[][5] = 那么是不是对LZ理解有帮助呢


 

关于typedef的用法总结

标签:

原文地址:http://www.cnblogs.com/yyxt/p/4256989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!