JNI入门之C/C++基础四

1.4结构体与指针

1.4.1结构体概念

结构体(struct)

     结构体是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构体中可以使用不同的数据类型。

1.4.2结构体几种定义方式

第一种:只有结构体定义

  struct stuff{  

          char job[20];  

          int age;  

          float height;  

  }; 

 

第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义

//直接带变量名

struct Man{

char name[20];

int age;

} m1, m2;

 

//下面这种写法:在定义结构体的同时声明结构体变量,并且给变量初始化

struct man{

         char name[20];

         int age;

}m1 = { "李四", 20 }, m2 = {"王五",23};

 

第三种:匿名结构体, 控制结构体变量的个数(限量版),声明几个就只有几个

struct{

         char name[20];

         int age;

}m1;

 

//下面这种写法声明两个结构体变量,并且初始化,那么这个结构体就只有这两个变量

struct {

         char name[20];

         int age;

}m1 = { "李四", 20 }, m2 = { "王五", 23 };

 

1.4.2结构体声明和内部成员变量的定义及访问:

1)      第一种方式(类似java构造方法)

//声明的同时初始化

struct man m1 = {"李四",20};

//或者先声明后初始化

struct man m2;

m2= {"王五",23};

 

2)      第二种方式

struct man m2;

strcpy(m2.name,"王五");

m2.age = 19;

1.4.3结构体嵌套

结构体的成员变量也是结构体,这时就叫结构体嵌套

struct teacher{

         char name[20];

};

 

struct man{

         char name[20];

         int age;

         struct teacher t;

 

};

 

void main() {

         struct man m ;

         m.age = 16;

         strcpy(m.name, "张三");

         strcpy(m.t.name, "李四");

         printf("%s,%d,%s\n", m.name, m.age,m.t.name);

         getchar();

}

1.4.3结构体指针

struct man{

         char name[20];

         int age;

};

 

void main() {

         struct man m = { "张三", 19 };

         struct man* p = &m;

         printf("%s,%d\n", m.name, m.age);

         printf("%s,%d\n", (*p).name, (*p).age);

         printf("%s,%d\n", p->name, p->age);

         getchar();

}

 

三种输出方式是等价的, p->”是“(*p).”简写形式

1.4.4结构体数组与指针

结构体数组遍历

struct man{

         char name[20];

         int age;

};

 

void main() {

         struct man mans[] = { { "张三", 23 }, { "李四", 24 } };

         int i = 0;

         for (; i < 2; i++){

                   printf("%s,%d\n",mans[i].name,mans[i].age);

         }

         getchar();

}

 

//下面这种方式遍历数组,采用指针

void main() {

         struct man mans[] = { { "张三", 23 }, { "李四", 24 } };

         struct man *p = mans;

         p = mans;

         for (; p < mans + 2; p++){

                   printf("%s,%d\n", p->name, p->age);

         }

         getchar();

}

 

1.4.5结构体与动态分配内存

struct man{

         char *name;

         int age;

};

 

void main() {

    //开辟内存,mp相当于一个结构数组名

         struct man *mp = (struct man *)malloc(sizeof(struct man) * 10);

         struct man *p = mp;

         p->name = "jack";

         p->age = 20;

         p++;

         p->name = "Rose";

         p->age = 19;

         struct man *loop_p = mp;

         for (; loop_p < mp + 2; loop_p++){

                   printf("%s,%d\n", loop_p->name, loop_p->age);

         }

         free(mp);

         getchar();

}

1.4.6 结构体中使用函数

struct a
{
    void (*func)(char *);
};

void hello(char *name)
{
    printf ("hello %s\n",name);
}

int main()
{
    struct a a1;
    a1.func = hello;     //给结构体中的函数指针赋值(函数名就是函数的入口地址)
    a1.func("illusion");  //利用函数指针调用函数
    system("PAUSE");
    return 0;
}

 

1.4.7 typedef类型取别名

typedef 类型取别名主要作用是为了书写简洁

typedef int Age;

Age a = 20;//可以直接用Age代替int使代码表达更简洁,更直观

 

typedef  struct Man{

         char name[20];

         int age;

} Man;

Man m1 = {“张三”,20};

 

//简写

typedef struct Woman{

         char name[20];

         int age;

} W, *WP;  //W 是woman结构体的别名, WP 是woman结构体指针的别名

 

 

typedef struct Girl{

         char * name;

         int age;

         void(*sayHi)(char*,char*);//函数指针

}Girl;

 

void sayHi(char* content, char* title){//函数具体实现

         MessageBox(0, content, title, 0);

}

 

void main() {

         Girl g = { "lisi", 20,sayHi };

         printf("%s,%d\n", g.name, g.age);

         g.sayHi("haha", "heihei");//调用函数

         getchar();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值