最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Android NDK開發(fā)之旅5--C語(yǔ)言基礎(chǔ)--結(jié)構(gòu)體

標(biāo)簽:
Android

结构体

概念、定义于初始化方式

一种综合的自定义的数据结构。

与Java中的类类似,可以有成员,包括变量和函数(函数指针)。

只有在声明的时候才能用{}进行初始化,否则只能逐一赋值。

示例代码:

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

struct Person{
    char* name;
    int age;
    void(*speek)();//函数指针,类似于Java中的成员方法
};

void speek(){
    printf("说话\n");
}

void main(){

    //结构体的初始化方式一
    struct Person p1 = {"小璐",20,speek};
    printf("我的名字是:%s,年龄:%d\n",p1.name,p1.age);

    p1.speek();

    //结构体的初始化方式二
    struct Person p2;
    p2.name = "小楠";
    p2.age = 20;
    p2.speek = speek;

    printf("我的名字是:%s,年龄:%d\n",p2.name,p2.age);
    p2.speek();

    system("pause");
}

结构体可以在定义之后跟着声明或者初始化变量

struct Person{
    char* name;
    int age;
    void(*speek)();
}p1,p2={"小楠",14,speek};

匿名结构体

控制结构体变量的个数(限量版),相当于单例

struct{
    char* name;
    int age;
    void(*speek)();
}p1,p2={"小楠",14,speek};

结构体的嵌套,初始化的时候{}嵌套即可,或者连.操作

struct Teacher{
    char* name;
};

struct Student{
    struct Teacher t;
    char* name;
};

结构体与指针

struct Person* p = &p2;

printf("%s,%d",(*p).name,(*p).age);//等价于
printf("%s,%d",p->name,p->age);

也就是说, -> 等价于 (*XXX).

结构体数组

struct Person persons[] = {{"小楠",20,speek},{"小璐",20,speek}};

//求出结构体数组的大小
int size = sizeof(persons) / sizeof(struct Person);

//遍历方式一,通过指针去遍历
struct Person* p = persons;
for ( ; p < persons + size ; p++){
    printf("%s,%d\n",p->name,p->age);
}

//遍历方式二,一般的数组方式去遍历
int i = 0;
for (; i < size ; i++){
    printf("%s,%d\n",persons[i].name,persons[i].age);
}

结构体的大小

字节对齐,结构体变量的大小,必须是最宽基本数据类型的整数倍。通过空间换取时间来提升读取效率。联想:刘翔跨栏。

意义:提升读取的效率。

struct Man{
    int age;//4字节
    double weight;//8字节
}m1 = {19, 20.0};

void main(){

    //大小应该是16
    printf("%d", sizeof(m1));

    system("pause");
}

结构体与动态内存分配

//动态分配10个Man结构体
struct Man* p = (struct Man*)malloc(sizeof(struct Man) * 10);

//初始化
int size = sizeof(p) / sizeof(struct Man);
struct Man* loop = p;
for (; loop<p+size ; loop++){
    loop->age = 20;
    loop->weight = 100.0;
}

//释放内存
free(p);

typedef取别名,定义新的类型,方便使用

//typedef 类型取别名
//1.不同名称代表在干不同的事情typedef int jint;  
//2.不同情况下,使用不同的别名
//#if defined(__cplusplus)
//typedef _JNIEnv JNIEnv;
//typedef _JavaVM JavaVM;
//3.书写简洁

整型取别名:

typedef int Age;
Age age = 10;

Person结构体取别名:

typedef struct Person P;
P p;

Person结构体指针取别名:

typedef struct Person* PP;
PP p = &p2;

在结构体定义的时候取别名(对应以上两种):

typedef struct Person{
    char* name;
    int age;
}P1,*P2;//P1是结构体的别名,P2是结构体指针的别名,与变量的声明区分开(没有typedef)

使用的时候更加简洁,更加像面向对象编程:

P1 p1;
P2 p2 = &p1;

终极例子:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <Windows.h>

//定义一个Girl结构体,包括属性和方法
typedef struct Girl{
    char *name;
    int age;
    //函数指针
    void(*sayHi)(char*);
}Girl;//给结构体取一个别名Girl(别名可以与结构体原本的名字相同)

//Girl结构体指针取别名GirlP
typedef Girl* GirlP;

//结构体的成员函数
void sayHi(char* text){
    MessageBoxA(0, text, "title", 0);
}

//自定义的一个函数
void rename(GirlP gp1){
    gp1->name = "Lily";
}

void main(){
    Girl g1 = { "Lucy", 18, sayHi };
    GirlP gp1 = &g1;
    gp1->sayHi("Byebye!");
    //传递指针,改名(只有传递指针才能修改值,所以指针是比较常用的方式)
    rename(gp1);

    getchar();
}

原文链接:http://www.apkbus.com/blog-0-65627.html

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消