0


初识C语言(3)

大家好,我是初识于冬!

文章目录

  • 十、数组
  • 十一、操作符
  • 十二、常用关键字
  • 十三、#define定义常量
  • 十四、指针
  • 十五、结构体

前言

接着上回的内容,我将继续给大家分享初阶C语言知识!


十、数组

定义:一种相同类型元素的集合

  • 数组的创建:

int arr[10]={1,2,3,4,5,6,7,8,9} //定义一个整形数组,最多放10个元素
int arr[10]={1,2,3}  // 不完全初始化,只初始化三个值,其余的初始化为0.

错误的写法:

int arr[]; //这种是错误的,需要初始化
int n;
int arr[n]={1,2,3}//这种也是错误的,数组大小不可使用变量指定
  • 数组的下标

根据C语言规定:数组中的每个元素都有一个下标,下标是从零开始。

而数组是可以通过下标来访问的。

比如:

int arr[10]={1,2,3,4,5,6,7,8,9,10}

//如果数组又是个元素,则下标的范围是0-9。

int arr[10]12345678910下标0123456789

  • 数组的使用

#include<stdio.h>
int main()
{
int i=0;
int arr[10]={1,2,3,4,5,6,7,8,9,10};  //定义数组
for(i=0;i<10,i++)  //利用循环打印数组内元素
{
printf("%d",arr[i]);
}
printf("\n");
return 0;
}

十一、操作符

算术操作符

+ - * / %

%是取余 例如:5%2==1;

移位操作符

>> <<

位操作符

& ^ |

赋值操作符

= += -= *= /= &= ^= |= >>= <<=

a+=5相当于a=a+5

a-=5相当于a=a-5 以此类推。

单目操作符

逻辑反操作

-

负值

+

正值

&

取地址

sizeof

操作数的类型长度

~

对一个数的二进制按位取反

--

前置、后置--

++

前置、后置++

*

间接访问操作符

(类型)

强制类型转换

sizeof是操作符,计算结果单位为字节(sizeof不是函数)

前置++:先++,后使用;后置++:先使用,后++。

前置- - :先 - -,后使用;后置 - -:先使用,后 - -。

关系操作符

>

大于

>=

大于等于

<

小于

<=

小于等于

!=

用于测试“不等于”

==

用于测试“相等”

逻辑操作符

&&

逻辑与

||

逻辑或
&&左右条件同时为真才为真,有一个假的则为假

||左右条件有一个为真就为真,两个都为假则为假

条件操作符

exp1?exp2:exp3

a>b?a:b;
//表示判断a是否大于b 若a大于b则输出a 不是则输出b

逗号表达式

exp1,exp2,exp3……expN

逗号表达式会从左向右依次计算

下标引用、函数调用和结构成员

【】 () . ->

【】下标引用操作符,例如数组。

()函数调用操作符 Add(a,b)。

注:未提到的操作符会在后续的博客中为大家详细讲解


十二、关键字

auto break case const continue default do else enum extern for goto if register return sizeof static struct switch typedef union volatile while char double float int long short signed unsigned void

  • 关键字typedef

typedef顾名思义就是类型定义,就是为类型重命名。

//将unsigned int 重命名为unit_32,所以unit_32也是一个类型名
typedef unsigned int unit_32;

int main()
{
//观察num1和num2,这两个变量的类型是一样的
unsigned int num1=0;
unit_32 num2=0;
return 0;
}
  • 关键字static

在C语言中:

static是用来修饰变量和函数的

  1. 修饰局部变量-称为静态局部变量
  2. 修饰全局变量-称为静态全局变量
  3. 修饰函数-称为静态函数

①修饰局部变量

#include<stdio.h>
void test()
{
  int i=0;
  i++;
  printf("%d",i);
}
  int main()
{
  int i=0;
  for(i=0;i<10;i++)
  {
   test();
  }
     return 0;
}
#include<stdio.h>
void test()
{
   static int 1=0;
   i++;
   printf("%d",i);
}
  int main()
{
   int i=0;
   for(i=0;i<10;i++)
     {
        test();
     }
      return 0;
}

对比代码一代码二的效果理解static修饰局部变量的意义。

结论:

static修饰局部变量的时候,改变了变量的存储类型。普通的局部变量是储存在栈区,被static修饰的变量是在静态区的。存储在静态区的变量出了作用域不会销毁,依然存在。所以静态的生命周期就是程序的生命周期。程序结束的时候,静态变量才回收空间。

②修饰全局变量

//代码1
//add.c
int year=2022;
//test.c
#include<stdio.h>
int main()
{
  printf("%d\n",year);
  return 0;
}
//代码2
//add.c
static int year=2022;
//test.c
#include<stdio.h>
int main()
{
  printf("%d\n",year);
  return 0;
}

代码1正常,代码2在编译的时候出错

注意:

static在修饰全局变量的时候,全局变量的外部链接属性变成了内部链接属性。这个全局变量只能在自己所在的.c文件里能看到,其他文件看不到了。

③ 修饰函数

//代码1
//add.c
int Add.c(int x,int y)
{
  return x+y;
}
//test .c
#include<stdio.h>
int main()
{
  printf("%d",Add(2,3));
  return 0;
}
//代码2
//add.c
static int Add.c(int x,int y)
{
  return x+y;
}
//test .c
#include<stdio.h>
int main()
{
  printf("%d",Add(2,3));
  return 0;
}

代码1正常,代码2在编译时报错

结论:

函数本身由外部使用的连接属性,如果使用static修饰函数,函数的外部链接属性就变成了内部链接属性。


十三、#define定义常量和宏

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x,y)((x)+(y))
#include<stdio.h>

int main()
{
  int sum=ADD(2,3);
  printf("sum=%d",sum);
  sum=10*ADD(2,3);
  printf("sum=%d\n",sum);
  return 0;
}

定义宏 #define ADD(x,y)((x)+(y)) 直接进行替换

ADD(int x,int y)

{

return x+y;

}


十四、指针

①内存

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

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

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
内存一个字节0xFFFFFFFF一个字节0xFFFFFFFF一个字节0xFFFFFFFF ………………一个字节0x00000002一个字节0x00000001一个字节0x00000000
变量是创建在内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。取出变量地址如下:

#include<stdio.h>
int main()
{
  int num=10;
  printf("%d",&num);
  return 0;
}

注:&num是指取出num的地址,且num内存放的是一个整数(整数占四个字节),取出的是一个字节的地址

既然地址中存有四个虚拟地址,该如何存储呢?需要定义变量。

指针的使用实例:

#include<stdio.h>
int main()
{
  int num=10;
  int *p=&num;
  *p=20;
  return 0;
}

以整型指针举例,可以推广到其他类型,如:

#include<stdio.h>
int main()
{
  char ch='w';
  char*pc=&ch;
  *pc='q';
  printf("%c\n",ch);
  return 0;
}

②指针变量的大小

#include<stdio.h>
int main()
{
  printf("%d\n",sizeof(char *));
  printf("%d\n",sizeof(short *));
  printf("%d\n",sizeof(int *));
  printf("%d\n",sizeof(double *));
  return 0;
}

结论:

指针大小在32位平台4个字节(32个bit位),在64平台就是8个字节(64个bit位)。


十五、结构体

在C语言中使用结构体来实现对复杂对象的描述

比如描述学生基本信息:名字+学号+性别+年龄

struct Stu
{
  char name[20];
  int age;
  char SEX[5];
  char id[15];
}

结构体的初始化:

#include<stdio.h>
int main()
{
  //初始化结构体
  struct Stu s={"帅哥",20,"男","20510507074"};
  //为结构体成员访问操作符
  printf("name = %s age = %d sex = %s\n",s.name,s.age,s.SEX,s.id);
  struct Stu *ps=&s;
  //结构体指针->结构体成员
  printf("name = %s age = %d sex = %s\n",s->name,s->age,s->SEX,s->id);
  return 0;
}

兄弟们键盘敲烂,月薪两万!不怕吃苦,努力干!


总结

以上为初识C语言最后一章的全部内容哦,若是有错误欢迎宝子们在评论区批评指正哦!也希望我总结的知识能给大家带来收获啦!后面博主会更新补充疑难知识点详细的讲解!感谢家人们的支持!

标签: c语言 开发语言

本文转载自: https://blog.csdn.net/m0_57808797/article/details/125906481
版权归原作者 初见于冬 所有, 如有侵权,请联系我们删除。

“初识C语言(3)”的评论:

还没有评论