蔡少芬和张晋综艺节目:深入理解C语言指针的奥秘(3)

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 05:53:05

           从格式上看倒是与通过指针访问结构成员的不正规方法的格式一样。             所有的C/C++编译器在排列数组的单元时,总是把各个数组单元存放在连续的存储区里,单元和单元之间没有空隙。但在存放结构对象的各个成员时,在某种编译环境下,可能会需要字对齐或双字对齐或者是别的什么对齐,需要在相邻两个成员之间加若干个 "填充字节 ",这就导致各个成员之间可能会有若干个字节的空隙。                     所以,在例十二中,即使*pstr访问到了结构对象ss的第一个成员变量a,也不能保证*(pstr+1)就一定能访问到结构成员b。因为成员a和成员b之间可能会有若干填充字节,说不定*(pstr+1)就正好访问到了这些填充字节呢。这也证明了指针的灵活性。          要是你的目的就是想看看各个结构成员之间到底有没有填充字节,嘿,这倒是个不错的方法。 过指针访问结构成员的正确方法应该是象例十二中使用指针ptr的方法。                  指针和函数的关系   可以把一个指针声明成为一个指向函数的指针。          int fun1(char*,int);          int(*pfun1)(char*,int);         pfun1=fun1;             ....             ....          inta=(*pfun1)( "abcdefg ",7);         //通过函数指针调用函数。                可以把指针作为函数的形参。在函数调用语句中,可以用指针表达式来作为实参。             例十三:               intfun(char*);          inta;          charstr[]= "abcdefghijklmn ";          a=fun(str);             ...             ...          int   fun(char*s)          {                int num=0;                for(int i=0;i