前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言初阶(七) - 指针、结构体

C语言初阶(七) - 指针、结构体

作者头像
怠惰的未禾
发布2023-04-27 21:00:53
4000
发布2023-04-27 21:00:53
举报
文章被收录于专栏:Linux之越战越勇

1. 指针

1.1 地址

计算机的内存中有许许多多的储存单元(大小为一个字节),这些储存单元都被进行了编号,每个储存单元都有唯一的编号,称之为储存单元的地址。

8bit(位) = 1byte(字节) 1024字节 = 1KB(千字节) 1024KB = 1MB(兆字节) 1024MB = 1GB 1024GB = 1TB 1024TB = 1PB 2^10 = 1024

  • 不同类型的变量都会储存在内存中,因此变量会有自己对应的地址,不同类型的变量在内存中所占的字节数有差异,一般以第一个字节的地址作为变量的地址

如何知道一个变量的地址呢?答案是取地址操作符&,可以取出变量的、函数的地址。

代码语言:javascript
复制
#include <stdio.h>
int main(){
    int a = 1;
    printf("%p\n", &a);
    return 0;
}

取出变量a的地址,这个地址是随机分配的,所以每次运行程序得到的地址也不一定相同。

1.2 指针

  • 上面所说的地址又叫指针常量,是已经确定的,不可改变
  • 我们可以创建指针变量储存某个地址,代表着指针变量指向这个地址,一般可以改变储存的地址以此来指向不同的地址。
  • 一般指针变量可以简称为指针。
1.2.1 指针的定义:定义一个相应数据类型的指针变量

格式:数据类型 *变量名

1.2.2 指针的初始化:
  • 先定义再初始化
  • 在定义的同时初始化
代码语言:javascript
复制
int a = 5;
int *p1 = NULL;
//p1是一个指针,指向int类型的数据
p1 = &a;

double b = 4.6;
//p2是一个指针,指向一个double类型的数据
double* p2 = &b;
1.2.3 指针变量的使用

以指向int类型的指针为例 指针变量可以指向一个变量的地址,如何通过指针变量影响(改变)指向的变量的值呢?通过解引用操作符*可以实现。

代码语言:javascript
复制
#include <stdio.h>

int main(){
    int a = 0;
    int *p = &a;
    //解引用操作符,此时*p等价于a
    *p = 10;
    printf("%d\n", *p);
    
    return 0;
}
1.2.4 指针变量的大小

指针存放的是地址,所以指针变量的大小是地址的大小。 32位平台上(32个bit)大小是四字节,64位平台上(64个bit)大小是八字节。

2. 结构体

C语言除了有基本的数据类型外,还可以借助struct自定义数据类型,用来描述复杂的对象。 比如描述一个学生,需要姓名、学号、班级、成绩、身份证号等信息。

2.1 结构体的定义

代码语言:javascript
复制
//一个学生所具有的基本信息
struct student{
    char name[10];
    char num[20];
    int class;
    int score;
    char id[20];
};

此时struct student就是一个自定义的数据类型,用法与charint等数据类型基本相同。

2.2 结构体的初始化

假设已经定义了struct student的数据类型

  • 只能在定义的同时初始化,而不能先定义再初始化

struct student a = {"xiaozhang","10001",1,95,"41XXXXXXXXXXXXXX"};

2.3 结构体的使用

  • 使用圆点操作符.访问一个结构体中的单个成员。
代码语言:javascript
复制
#include <stdio.h>

struct student{
    char name[10];
    char num[20];
    int class;
    int score;
    char id[20];
};

int main(){
    struct student a = {"xiaozhang","10001",1,95,"41XXXXXXXXXXXXXX"};
    printf("%s %s %d %d %s", a.name, a.num, a.class, a.score, a.id);
    return 0;
}

运行结果:

  • 使用箭头操作符->访问结构体的单个成员,前提是一个结构体指针
代码语言:javascript
复制
#include <stdio.h>

struct student{
    char name[10];
    char num[20];
    int class;
    int score;
    char id[20];
};

int main(){
    struct student a = {"xiaozhang","10001",1,95,"41XXXXXXXXXXXXXX"};
    //这是一个指针,指向一个结构体变量
    struct student *p = &a;
    printf("%s %s %d %d %s", p->name, p->num, p->class, p->score, p->id);
    return 0;
}

运行结果:


END

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 指针
    • 1.1 地址
      • 1.2 指针
        • 1.2.1 指针的定义:定义一个相应数据类型的指针变量
        • 1.2.2 指针的初始化:
        • 1.2.3 指针变量的使用
        • 1.2.4 指针变量的大小
    • 2. 结构体
      • 2.1 结构体的定义
        • 2.2 结构体的初始化
          • 2.3 结构体的使用
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档