Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155979
  • 博文数量: 44
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 407
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-10 13:28
个人简介

仰望星空

文章分类
文章存档

2016年(22)

2015年(22)

我的朋友

分类: C/C++

2015-11-21 18:03:15

一、结构体变量作为函数参数
      输出得不到想要的结果

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #define LEN 10
  3.     struct stu
  4.     {
  5.         char *Name;
  6.         float Score;
  7.     } my;

  8.     Value (struct stu t)
  9.     {

  10.         t.Name = "zhansan";
  11.         t.Score = 93.6;
  12.     }

  13. int main()

  14. {
  15.     //如果不加这一句那么my.Name就是一个空指针,所以其执行时没法读取
  16.     //my.Name=(char *)malloc(LEN*sizeof(char));
  17.     Value(my); // 局部变量里的值是没法传回来的
  18.     printf("Name = %s\n",my.Name);
  19.     printf("%f\n",my.Score);
  20.     return 0;
  21. }

二、结构体数组变量做函数参数
       能够实现变量的替换

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. typedef struct stu
  3. {
  4.     char *Name;
  5.     float Score;
  6. }STU; // 这样是用 STU 就能定义结构体了

  7. Value (STU t[2])
  8. {

  9.     t[0].Name = "zhangsan";
  10.     t[0].Score = 93.6;

  11.     t[1].Name = "lisi";
  12.     t[1].Score = 89.5;

  13. }

  14. int main()

  15. {
  16.     
  17.     STU my[2] = {{"hehe", 79.7},{"dada", 65.5}}; //赋初值
  18.     Value(my); //调用函数
  19.     printf("Name = %s\n",my[0].Name);            //输出值发现值改变
  20.     printf("%f\n",my[0].Score);

  21.     printf("Name = %s\n",my[1].Name);
  22.     printf("%f\n",my[1].Score);
  23.     return 0;
  24. }

三、结构体指针变量做函数参数
       能得到传递的结果

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. #define LEN 10
  3. typedef struct stu
  4. {
  5.     char *Name;
  6.     float Score;
  7. } STU;

  8. Value (STU *t)
  9. {
  10.     t->Name = "zhangsan";
  11.     (*t).Score = 99.5; //(*t).Score和t->Score作用是一样的

  12. }

  13. int main()
  14. {
  15.     STU *my;
  16.     
  17.     my = (STU*)malloc(LEN * sizeof(STU)); //给结构体指针变量分配内存
  18.                                         // 要不然会报错的
  19.     Value (my);
  20.     printf("Name = %s\n",my->Name);
  21.     printf("%f\n",my->Score);

  22.     return 0;
  23. }
四、下面是一些注意事项的讲解,不能往一个没有指向的指针里边写入或者读取数值


/************************************《先分配内存单元,再给指针赋值》******************************************
下面的定义方法是正确的
int *a=(int *)malloc(n*sizeof(int));  // 定义指针,并分配内存单元
*a = 4;  // 将值存入到指针a所指向的内存单元中


// 下面的定义方法就会出错
int *a; // 定义指针,没有分配内存单元
*a = 4;  // 此时系统不知道该将4存入到哪个内存单元
(因为指针未指向具体的内存单元(此时称该指针为野指针)),所以执行的时候会出错(编译没错)
***************************************************************************************************************/



/*************************************《a原来是float型的,强制转换成int型》************************************

问问题不要断章取义。*p=(int *)a这个不是一个完整的语句,前面后面都可能省略内容。


float b=3.14,*a=&b;
int *p=(int *)a;           //这个才是完整的,前面有int *,后面有分号。表示将指针a的类型转换为整型指针再赋给p。
***************************************************************************************************************/



阅读(1384) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~