首页 > 代码库 > 关于typedef的用法总结

关于typedef的用法总结

 

 

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的用法总结