通过这14点,让你快速入门C语言(4)

简介: 通过这14点,让你快速入门C语言(4)


12. #define 定义常量和宏

12.1 #define 定义常量

#include <stdio.h>
#define MAX 1000
#define STR "abcdef"
int main()
{
    printf("%d\n", MAX);
  int a = MAX;
  int arr[MAX] = { 0 };
  printf("%d\n", a);
  printf("%s\n", STR);
  return 0;
}

12.2 #define 定义宏

#include <stdio.h>
//函数
int Add(int x, int y)
{
  return x + y;
}
//宏
#define ADD(x,y) ((x)+(y))
#define MAX(x,y) ((x)>(y)?(x):(y))
int main()
{
  int a = 10;
  int b = 20;
  int c = Add(a, b);
  int d = ADD(a, b);
  int e = MAX(a, b);
  printf("%d\n", c);
    printf("%d\n", d);
    printf("%d\n", e);
    
  return 0;
}
//宏的参数替换

13. 指针

13.1 内存

注: 编号就是内存单元的地址,我们把地址也叫做指针(编号=地址=指针)


当a创建好后,占用4个字节,每个字节都有一个地址(编号),&a拿到的是第一个字节的地址

注: 0x00B5F988 —— 16进制的数值


int main()
{
   int a = 10;
   int * pa = &a;
   return 0;
}

注:

i) int * 整体是一个类型:整型指针类型

ii) * 说明 pa 是指针变量

iii) int 说明的是 pa 指向的对象是 int 类型的


#include <stdio.h>
int main()
{
  int a = 10;//4个字节
  //*&a;//a
  int * pa = &a;//pa是创建出来存放地址(指针)的,pa就是指针变量
  *pa = 20;//*是解引用操作符,*pa就是通过pa中存放的地址,找到pa指向的空间。
  //a = 20;       
  printf("%d\n", a);
  //& - 取地址操作符,取出谁的地址
  //* - 解引用操作符(间接访问操作符),通过地址找到地址指向的内容
  
  char* pc = &a;//理论上是支持的,但是为什么呢?
  
  char ch = 'w';
  char* pc = &ch;
  return 0;
}

总结:

  • 指针其实就是地址,地址就是内存单元的编号
  • 把地址进行存储的时候,就可以放到一个变量中,这个变量就是指针变量
  • 口头语中说的指针,一般指的是指针变量

13.2 指针变量的大小

指针变量的大小是多少呢?

因为指针变量是用来存放地址的,所以指针变量的大小取决于存储一个地址需要的空间。

电脑存在地址线(32/64)

  • 32位环境下:32个0或者1组成的地址序列,需要32bit(4byte)的空间来存储,因此,指针变量的大小需要4个字节。
  • 64位环境下:地址的序列就是64个1/0组成的二进制序列,要存储起来,需要8个字节。

x86 —> 32位环境

x64 —> 64位环境

#include <stdio.h>
int main()
{
  char ch = 'a';
  char* pc = &ch;
  //sizeof 计算的结果是无符号整数的
  //对应的打印格式应该是:%zu
  printf("%zu\n", sizeof(char*));
  printf("%zu\n", sizeof(pc));
  printf("%zu\n", sizeof(short*));
  printf("%zu\n", sizeof(int*));
  printf("%zu\n", sizeof(long*));
  printf("%zu\n", sizeof(long long*));
  printf("%zu\n", sizeof(float*));
  printf("%zu\n", sizeof(double*));
  return 0;
}

14. 结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

例:学生:名字+年龄+性别+身高+体重

struct Tag
{
   成员列表;
};

例:

struct Stu
{
   char name[20];
   int age;
   float score;
};

以上就是一个结构体类型,与int、float相似,可以用结构体类型创建变量


#include <stdio.h>
struct Stu
{
  char name[20];
  int age;
  float score;
};
void Print(struct Stu * ps)
{
  //1.
  //printf("%s %d %f\n", (*ps).name, (*ps).age, (*ps).score);
  //2.结构体指针->结构体成员
  printf("%s %d %f\n", ps->name, ps->age, ps->score);
}
int main()
{
  struct Stu s1 = { "zhangsan",20,95.5f };
  struct Stu s2 = { "lisi",40,99.8f };
  //结构体变量.结构体成员
  //.
  //->
  //输入数据到s2中
  scanf("%s %d %f", s2.name, &(s2.age), &(s2.score));//数组名本来就是地址,所以name不需要取地址
  
  printf("%s %d %f\n", s1.name, s1.age, s1.score);
  Print(&s2);
  
  return 0;
}


目录
相关文章
|
7月前
|
存储 编译器 C语言
C语言难?深度剖析第一段C语言代码—带你快速入门C语言
C语言难?深度剖析第一段C语言代码—带你快速入门C语言
86 0
|
6月前
|
存储 编译器 C语言
通过这14点,让你快速入门C语言(3)
通过这14点,让你快速入门C语言(3)
29 0
|
6月前
|
存储 Linux C语言
通过这14点,让你快速入门C语言(2)
通过这14点,让你快速入门C语言(2)
92 0
|
6月前
|
Java 编译器 C语言
通过这14点,让你快速入门C语言(1)
通过这14点,让你快速入门C语言(1)
49 0
|
Java 编译器 C语言
C语言快速入门
C语言快速入门
|
程序员 C语言
【C语言初阶】万字解析,带你0基础快速入门C语言(下)1
【C语言初阶】万字解析,带你0基础快速入门C语言(下)
66 0
【C语言初阶】万字解析,带你0基础快速入门C语言(下)1
|
存储 C语言
【C语言初阶】万字解析,带你0基础快速入门C语言(下) 2
【C语言初阶】万字解析,带你0基础快速入门C语言(下)
77 0
|
编译器 程序员 C语言
【C语言初阶】万字解析,带你0基础快速入门C语言(上)2
【C语言初阶】万字解析,带你0基础快速入门C语言(上)
175 0
|
存储 数据处理 C语言
【C语言初阶】万字解析,带你0基础快速入门C语言(上)1
【C语言初阶】万字解析,带你0基础快速入门C语言(上)
66 0
|
2月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
36 3