Chinaunix首页 | 论坛 | 博客
  • 博客访问: 318648
  • 博文数量: 43
  • 博客积分: 1044
  • 博客等级: 准尉
  • 技术积分: 658
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-20 14:56
个人简介

人法地,地法天,天法道,道法自然。

文章分类

全部博文(43)

文章存档

2019年(1)

2013年(3)

2012年(15)

2011年(24)

分类: C/C++

2012-08-02 22:33:47

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. struct a
  4. {
  5.     int a;
  6.     int b;
  7. };

  8. typedef struct a a;

  9. int c;

  10. int *show()
  11. {
  12.   return &c;
  13. }

  14. typedef int *(*fun)();

  15. fun s()
  16. {
  17.     return show;
  18. }

  19. int main(int argc, char *args[], char *env[])
  20. {
  21.     a b;
  22.     a a;
  23.     int *p = NULL;
  24.  
  25.     a.a = 1;
  26.     a.b = 2;

  27.     (p = malloc(sizeof(int)))[0] = 5;
  28.     *show() = 5;
  29.     show()[0] = 3;

  30.     *s()() = 1;
  31.     printf("*p = %d \n", *p);
  32.     printf("*show = %d \n", *show());

  33.     b = a;

  34.     printf("b.a = %d b.b = %d \n", b.a, b.b);

  35.     return 0;
  36. }

从main函数开始解释:
1.进入main函数之后定义了两个结构体变量b,a。可以看出故意将b的声明写在a之前。
  这是因为如果将变量a的声明写在变量b之前会让b的类型中的a认为是变量a。
2.接下来是

点击(此处)折叠或打开

  1. (p = malloc(sizeof(int)))[0] = 5;
根据括号的可以看出:先申请一个int的内存并赋值给p,然后使用数组操作取出数组的第一个元素给该元素
赋值为5。

那么这句的最后结果就是申请内存,内存地址赋值给p,并将p指向的内存的值设置为5.

3.调用函数show。这里的使用方法与一般的函数调用有所不同。因为show返回一个全局int变量的地址,再在函数前加上取之运算符,就变成全局变量了,然后再给全局变量赋值。

接着调用show函数,使用数组下标运算符来取变量。

4.s函数返回函数指针,所以后面就会带两个函数调用时使用的圆括号。

5.接下来就是结构体之间的赋值了,直接使用等号,没有使用memcpy来完成。这是在C99中加入的特性



阅读(2699) | 评论(0) | 转发(2) |
0

上一篇:变量与符号

下一篇:内存管理

给主人留下些什么吧!~~