Linux下的C语言基础-2


控制语句:
  条件判断:if、if else
  循环语句:while
  转向语句:break :跳出所有循环 执行循环后边的语句
  continune:结束当前循环,不执行continune 后的语句。继续下一次循环

1.switch 开关语句
  简化if语句的多层嵌套

2.for 循环语句
  for(表达式1;表达式2;表达式3)
  语句;
    表达式1:循环变量赋初值,for(int a = 0;xxxx;xxxx;)
    表达式2:循环条件,一般为关系表达式,或逻辑表达式
    表达式3:修改循环变量的值,一般为赋值语句


3.数组:有一定顺序关系的相同数据类型的变量集合
  数组属于构造类型
  数组元素可以是基本数据类型或构造类型
  数组可分为数值数组、字符数组、指针数组、结构体数组等

C语言中使用数组前必须先定义

<存储类型><数据类型><数组名>[<常量表达式>];
存储类型:auto register static extern
数据类型:数组元素的数据类型
数组名:数组标识符
常量表达式:数组元素的个数或数组的长度

数组初始化:
  全部初始化---> int a[5] = {1,2,3,4,5};
  部分初始化---> int a[10] = {1,2,3,4,5};其余的元素自动赋值为0
  数组全部赋值---> int a[] = {1,2,3,4,5};全部赋值是可以省略下标常量的
  编译器根据初始化列表统计我们的数组元素个数
  数组全部初始化为0---> int a[10]={0};

数组内存的分配:
  数组分配的是连续空间,根据单个元素所占空间进行分配
  数组下标是从0开始的 如数组的常量表达式为n 则最后一个元素下标为 n-1
  访问数组元素时不允许超出数组下标范围 很危险 访问越界

#include <stdio.h>

int main(int argc, const char *argv[])
{
int a[10]={1,2,3,4,5,6,7,8,9,10};

int *p = a;

for(int i=0;i<10;i++){

printf("%d :%p ",a[i],p++);

}
return 0;
}

练习:冒泡排序:

#include <stdio.h>

int main(int argc, const char *argv[])
{
int a[10]={99,22,33,55,77,11,66,44,88,111};

int i,j;

for(i=0;i<10;i++){
for(j=0;j<9-i;j++){

if(a[j]<a[j+1]){

int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}

}

}

for(i=0;i<10;i++){

printf("%d ",a[i]);

}
return 0;
}


4.字符串
  字符串是以‘’结尾的一串字符
  C语言中没有专门的字符串变量

通常我们是用字符数组存放字符串,因此字符数组存放字符串也要把‘’放到数组中
且作为结尾标志

char c[]={'h','e','l','l','o',''};
char c[]={"hello"};
char c[]="hello";
用字符串要比用字符逐个赋值多占一个字节,用来存放‘’;
‘’是由编译器自动加上去的

char *s = "hello";
练习:求 指向字符串的 指针所占字节长度

字符串处理函数
考贝:#include <string.h>
char *strcpy(char *dest, const char *src);
功能:将src的字符串拷贝到dest里边
参数:src源字符串的起始地址,dest是目标起始地址
返回值:目标字符串的起始地址
注:‘’也会被拷贝

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

#define LEN 128

int main(int argc, const char *argv[])
{
char c[]="hello";
char s[LEN];

char *s1=NULL;

s1=strcpy(s,c);

printf("%s ",s);
printf("s=%p s1=%p ",s,s1);
return 0;
}


比较:int strcmp(const char *s1, const char *s2);
功能:按照ASCII码顺序比较s1、s2字符串
参数: s1和s2都是字符串的起始地址
返回值:s1 = s2 返回 ==0
s1 > s2 返回 >0
s1 < s2 返回 <0

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

int main(int argc, const char *argv[])
{
char *s = "hello";
char *s1 = "hello world";

int ret = strcmp(s1,s);

printf("ret = %d ",ret);

if(ret == 0){

printf("s1==s2 ");

}


return 0;
}

求长:size_t strlen(const char *s);
功能:求字符串长度 不含‘’
参数: s 是字符串起始地址
返回值: 字符串长度

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


int main(int argc, const char *argv[])
{
char *s="hello world";

int ret = strlen(s);
printf("ret = %d ",ret);
return 0;
}


5.指针
  指针是一个变量,表示普通变量的地址,指针的内存字节宽度视操作系统而定。
  32位操作系统4字节
  64位操作系统8字节

  int a;
  int *p = &a;
  *p==a
  p==&a
  &为普通变量取地址符,
  *为指针变量存储的地址数据所存储的值

  指针的定义:
  类型说明 * 变量名
  int *p;只能指向int类型的普通变量地址
  char *s;只能指向char类型的普通变量地址

指针赋值:
指针使用前不仅要定义说明,而且要赋予具体的值
未经赋值的指针不能随便使用;

  int i;
  int *p;
  p = &i;
  ********
  int i,*p;
  p=&i;
  ********
  int i ,*p=&i;

  指针常量:
  指向一块区域,这块区域可读可写,但是指针初始化后不能改变
  char *const p;


  常量指针:
  指向一块区域,这块区域只可读不可写。
  const char *p;


  野指针:
  int *a;
  *a = 52;
  a是随机指向一个内存单元,这样的指针称为野指针。使用是不合法的
  指针在间接使用之前一定要确保已经指向一个合法的对象







6.函数
7.结构体

原文地址:https://www.cnblogs.com/Halo-zyh-Go/p/12615269.html