初识C语言(四)

简介: 初识C语言(四)

1.指针

要学习指针,就得理解内存  指针就是用来访问内存的

內存

內存是电脑上特别重要的存取器,计算机中程序的运行都是在内存中进行的

所以为了有效的使用内存,就把内存划分为一个个小小的内存单元,每个内存单元的大小是1个字节

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的的地址

在C语言中 地址编号也是叫指针    编号 == 地址 == 指针  三个表达的意思相同


编号


在计算机上,有地址线,也就是物理的电线

可传递高低电平的信号,转换为数字信号:高电平为1,低电平为0。所以计算机采用2进制,每个信号(1/0)是一个二进制位,也就是bit位

32位计算机,上面有32根地址线,每个地址线会传递一个数字信号,所以会产生2的32次方个不同的信号编号,这些编号可以管理2的32次方个字节,4GB的内存,就是可以为每个字节进行编号,可以通过编号找到他们在内存中的位置。我想肯定会有人问,为什么以字节为单位编号,那是因为我们所学的数据类型中char字符型所占内存最小,为一个字节,所以字节为单位最好。

现在计算机一般是64位,这样可以管理更多的内存。


1.1 指针的使用:

//程序运行起来,要加载到内存中,也要申请内存空间使用
int main()
{
  int a = 15;//a是int类型
  //所以向内存中申请了4个字节的空间 来存放15这个数值
  //虽然a占用4个字节,但我们&a的时候,拿到的是4个字节中的的第一个字节的地址
  //%p - 专门用来打印地址的,是16进制的形式表示地址的
  printf("%p", &a);//&取地址符,拿到a的地址
  int* pa = &a;//pa用来存放a的地址,是一个变量,叫指针变量  意思是存放指针的变量
  // * 是为了表示 pa 是一个指针变量
  //int 是为了表示 pa 指向的是 int 类型的变量
  //可以通过地址找到a
  *pa = 30;// * 解引用操作符,*pa就是a
  printf("%d\n", a);//打印30;
  //提供了另一种方式对a进行操作
  return 0;
}


指针 - 地址 - 编号  三个意思相同

指针变量 - 是一个变量 - 就是存放地址的变量

口头语中说的指针,基本上都是指针变量。


1.2 指针变量的大小

指针变量是用来存放地址的

32位机器:地址是32个2进制位,也就是32个bit位,1个字节8个bit位,所以这个地址要存储的话要4个字节。所以在32个机器上,指针变量的大小是4个字节

64位机器:64个2进制位,这个地址要存储的话要8个字节。


所以,指针变量的大小与它指向的数据的类型是没有关系的,它的大小只与操作系统的位数有关。


int main()
{
  int a = 10;
  int* p = &a;
  printf("%d\n", sizeof(p));//32 4个字节   64位  8个字节
  printf("%d\n", sizeof(int*));//32 4个字节   64位  8个字节
  return 0;
}


在VS2022编译器上,可以自己改变编译环境位数。x64位64位环境,指针变量大小为8个字节。x86为32位环境,指针变量大小为4个字节。

2.结构体

char short int 等数据类型是比较单一的

不足以描述一些复杂类型,如学生,书

学生 :名字 年龄 性别等

书  : 书名 作者 定价

C语言中引入了结构体描述复杂对象   使用关键字struct


2.1结构体的使用和结构体变量的创建

//学生 结构体
struct Student//Student为结构体名称,可以随意设置
{
  //学生的相关属性   结构体成员
  char name[20];//名字—字符串  ,一个汉字是2个字符
  int age;//年龄
  char sex[5];//男 女 保密     数组长度[5]是因为保密4个字符 \0一个字符
};
//书 结构体
struct Book
{
  //结构体成员
  char name[20];
  char auther[10];
  float price;
};
int main()
{
    //创建结构体变量s   struct Student为结构体类型
  struct Student s = {"西兰花",19,"男"};//s 学生结构体变量
  struct Book b = { "《初识C语言》","西兰花",66.6f };//b 书结构体变量
  //.操作符 通过结构体变量访问结构体成员
  printf("%s %d %s\n", s.name, s.age, s.sex);
  printf("%s %s %f\n", b.name, b.auther, b.price);
  //这里价格浮点型数据,会精度丢失,不能准确打印,后期会讲
}


2.2结构体指针

struct S//S结构体类型
{
  char name[20];
  int age;
  float score;
};
void print1(struct S t)
{
  //第一种访问结构体成员写法
  //语法:  结构体变量.成员
  printf("%s\n%d\n%.2f\n", t.name,t.age,t.score);
}
void print2(struct S* ps)
{
  //第二种访问结构体成员写法
  //语法:  结构体变量.成员     与第一种相同,解引用结构体指针得到的也是结构体变量,
  printf("%s\n%d\n%.2f\n", (*ps).name, (*ps).age, (*ps).score);//.的优先级比 * 高,所以加()
  //第三种访问结构体成员写法
  //语法:  结构体指针->成员
  printf("%s\n%d\n%.2f\n", ps->name, ps->age, ps->score);//->
}
int main()//先执行main函数
{
    //创建结构体变量
  struct S s = { "是个西兰花",20,99.9f };
  print1(s);//调用自己编写输出函数
  print2(&s);//这里传入的是结构体变量的地址,&s,取出s的地址
  return 0;
}


初识C语言系列结束,后面文章会对每个模块进行详细讲解,谢谢大家支持。

相关文章
|
10月前
|
Java 编译器 程序员
C语言 (3)
C语言 (3)
74 0
|
10月前
|
C语言
初识C语言
初识C语言
51 0
|
网络协议 Java 程序员
C语言
一、什么是C语言 C语言是一种通用的高级编程语言,由美国计算机科学家丹尼斯·里奇于1972年在贝尔实验室开发。C语言以其简洁、高效和可移植性而闻名,广泛应用于系统软件、应用软件和嵌入式系统等领域。 C语言具有简单的语法和丰富的库函数,使得程序员能够更有效地编写代码,并具有更好的可读性和可维护性。它支持面向过程的编程风格,允许开发者直接操作内存,提供了强大的指针功能,使得对内存的管理更加灵活。 C语言被广泛应用于操作系统、编译器、数据库、网络协议、游戏开发等领域。许多其他编程语言,如C++、Java和Python等,都受到C语言的影响,并在其基础上发展而来。 二、C语言的特点 C语言具有以下几个
89 0
|
5月前
|
存储 机器学习/深度学习 编译器
一篇文章,把你的C语言拉满绩点
一篇文章,把你的C语言拉满绩点
28 0
|
5月前
|
小程序 C语言
怎么学C语言?干货
怎么学C语言?干货
52 0
|
7月前
|
C语言
C语言中的复合语句
C语言中的复合语句
693 1
|
8月前
|
Java 编译器 C#
【C语言】初识C语言
学习C语言前期需要掌握的一些基础知识
75 2
【C语言】初识C语言
|
10月前
|
自然语言处理 算法 Linux
C语言:深入探索与实际应用
C语言,作为计算机科学基石,以其通用性、过程式编程和底层访问能力在系统编程、嵌入式开发等领域广泛应用。其支持结构化编程、变量作用域和递归,提供高效代码编写方式。数据类型(如整型、浮点型、字符型)、控制结构(如if-else、循环)、函数和指针是C语言的关键特性。指针允许直接操作内存,增强了灵活性。C语言在操作系统(如Linux内核)、嵌入式系统、游戏开发及数据结构与算法实现中扮演重要角色,是理解和学习其他编程语言的基础。通过深入学习C语言,开发者可以提升技能,适应各种编程挑战。
|
10月前
|
C语言 C++
C语言集106-111
C语言集106-111
|
存储 安全 编译器
初识c语言(下)
初识c语言(下)
67 0