数据结构二

/*
2012/4/6
*/

指针和结构体
#include < stdio.h >

int main()
{
    double * p;
    double x = 66.6;
    p = &x;  
   
    //x 本身占4个字节,一个字节八位
    //一个字节一个地址,8位一个地址
    //那 x占四个字节,一个字节一个地址,一共就有8个地址
    //那么 , p里面放的只是一个地址,存放的是首地址/末地址
    用第一个字节的地址表示整个变量
   
   
    double array[2] = {2,4};
    p = array;
   
    printf("%p",p);//十六进制输出
    printf("%p",p+1) ; //两个数会差四个字节
   
   
    !!!!!!!!!!!!!!!!
    所有的指针变量都是占四个字节
    因为:
    地址都是四个字节而已
 
    32位地址总线
    2^32 -1 【 4G - 1 】 
   
    !!!!!!!!!!!!!!!!  
    return 0;
   
}


结构体
1.什么叫结构体

2.如何使用结构体
3.注意事项
struct student
{
    int age;
    char name[20];
}name;


//定义一个数据类型student,它的别名叫做name

int main(void)
{
    struct student s1;
    //s1.age = 14;  第一种方式
   
    一般我们不用名字来调用结构体,因为我们不可能知道那么多的名字
    因为:我们不可能对每个内存都定义变量名,然后再用变量名。的方式来调用
    我们用一个指针变量P来搞定
   
    struct student * pst ;
    //理论上,struct student 占4+20 =24个字节
    //那么,struct student * 占多少个字节?
    // 占  4  个  —— 指针变量
   
    pst = &s1;
   
    pst -> age =5;  // 等价于 s1.age
   
    !!!!!!!!!!!!!!!!!
    pst ->age
   
    表示:pst指向的结构体变量的age成员
   
    !!!!!!!!!!!!!!!!!
   
    注意事项:
    1.结构体变量 不能加减乘除,但是可以相互赋值
    2.普通结构体变量 和 结构体指针 作为函数参数 传递
   
    struct student s1;
    s1 内存有为它分配空间
   
    相当于 int i;
    全部属于静态变量
   
    通过f函数来修改s1里面的值
    void f(struct student * pst)
    {
     //将s1的地址传给pst
     而不是把整个变量传过去
     pst -> age =5;
     strcpy(pst->name ,"lisi");
    }
   
    strcpy(s1.name,"lisi");
    printf("%d,%s",s1.age,s1.name);
    return 0;
}


class student
{
    int sid;
    string name;
    int age;
   
    void inputStudent()
    {}
   
    void ouputStudent()
    {}
}

 

动态内存分配

new  delete
malloc  free

#include <stdio.h>
int main()
{   int a[5] = {1,2,3,4,5};
    //定义一个静态数组
   
    //动态使用数组,在运行的过程当中,不知道到底数组的长度是多少
   
    int len;
    printf("请输入您所需要分配的数组长度\n");
   
    scanf( "%d" , &len);
    int * pArr = (int *)malloc(sizeof( (int) *len );
   
    //定义了一个 指针,指向 内存为 大小为sizeof( (int) *len 的首地址
    //malloc 返回变量第一个的地址
    //int * 表示:告诉系统,这个地址其实是整型变量的地址
    因为:无论是double类型的还是int类型的首址都是一样四个字节
    系统没有办法判断到底是 double还是int
    所以要用强制类型转换 ( int *)
    //  (int) *len   是 4 * len;
   
   
    ( pArr + 3 ) -> age = 4; //等价于  pArr[3].age = 4;
   
    //这个时候我们可以把pArr当做普通数组来使用
   
    free(pArr);    //把pArr所控制的 4*len个字节的内存释放
     
    return 0;
   
}

 

posted @ 2012-04-10 19:53  喜欢阿亮的小水  阅读(190)  评论(0编辑  收藏  举报