C语言基础入门详解二

简介: C语言基础入门详解二

一、C语言多级指针入门

#include<stdio.h>
#include<stdlib.h>
/**
  多级指针 
  指针指向的就是内存地址
  地址就是指针 
*/ 
main(){
  //定义一个int类型的变量i,并且赋值为100; 
  int i = 100;
  //定义一个int类型的一级指针变量address1,并且把i的地址赋值给它 
  int* address1 = &i;
  //定义一个int类型的二级指针变量address2,并且把address1对应的地址赋值给它 
  int** address2 = &address1;
  //定义三级指针 
  int*** address3 = &address2;
  //定义四级指针
  int**** address4 = &address3;
  //多级指针取值 ****address4得到的值是100
  printf("****address4==%d\n",****address4); 
  ****address4 = 2000;
  printf("****address4==%d\n",****address4); 
  printf("***address3==%d\n",***address3); 
  ****address4 = 2000;
  printf("***address3==%d\n",***address3); 
  printf("i==%d\n",i); 
  system("pause");
}

输出到控制台内容如下:

对应的内存分析图如下:

二、C语言中数组的简介

#include<stdio.h>
#include<stdlib.h>
/**
  数组的介绍
  1.数组的取值
  2.数组的取地址
  3.数组是一块连续的内存空间
  4.数组的首地址和数组的地址相同 
  5.数组的设计 
*/ 
main(){
  char cArray[] = {'H','E','L','L','O'}; 
  int iArray[] = {1,2,3,4,5};
  //取数组的值
  printf("cArray[0]==%c\n",cArray[0]); 
  printf("iArray[0]==%d\n",iArray[0]); 
  //取内存地址
  printf("cArray地址==%#x\n",&cArray); 
  printf("cArray[0]地址==%#x\n",&cArray[0]); 
  printf("cArray[1]地址==%#x\n",&cArray[1]); 
  printf("cArray[2]地址==%#x\n",&cArray[2]); 
  printf("cArray[3]地址==%#x\n",&cArray[3]); 
  //内存是一块连续的内存空间 
  printf("iArray地址==%#x\n",&iArray); 
  printf("iArray[0]地址==%#x\n",&iArray[0]); 
  printf("iArray[1]地址==%#x\n",&iArray[1]); 
  printf("iArray[2]地址==%#x\n",&iArray[2]); 
  printf("iArray[3]地址==%#x\n",&iArray[3]);
  //用指针去取值
  printf("iArray==%d\n",*iArray); 
  printf("iArray[0]==%d\n",*iArray+0); 
  printf("iArray[1]==%d\n",*iArray+1); 
  printf("iArray[2]==%d\n",*iArray+2); 
  printf("iArray[3]==%d\n",*iArray+3); 
  printf("iArray[0]==%d\n",*(iArray+0)); 
  printf("iArray[1]==%d\n",*(iArray+1)); 
  printf("iArray[2]==%d\n",*(iArray+2)); 
  printf("iArray[3]==%d\n",*(iArray+3)); 
  printf("cArray[0]==%c\n",*(cArray+0)); 
  printf("cArray[1]==%c\n",*(cArray+1)); 
  printf("cArray[2]==%c\n",*(cArray+2)); 
  printf("cArray[3]==%c\n",*(cArray+3)); 
  system("pause");
}

输出到控制台内容如下:

三、C语言中让用户输入数组

#include<stdio.h>
#include<stdlib.h>
/**
  用户输入一个数组 
*/ 
main(){
  printf("请输入数组的长度:\n");
  //1.用户输入数组的长度
  int length;
  scanf("%d",&length);
  printf("您输入的数组长度为:%d\n",length);
  //2.用户根据用户输入的长度创建数组 
  int iArray[length];
  //3.让用户输入数组的值
  int i;
  for(i=0;i<length;i++){
    printf("请输入iArray[%d]的值:\n",i);
    scanf("%d",&iArray[i]);
  }
  //4.把数组内容打印出来
  for(i=0;i<length;i++){
    printf("iArray[%d]的值=%d\n",i,iArray[i]);
  }
  system("pause");
}

输出到控制台内容如下:

四、C语言中数组的取值运算

#include<stdio.h>
#include<stdlib.h>
/**
  数组的介绍
  1.数组的取值
  2.数组的取地址
  3.数组是一块连续的内存空间
  4.数组的首地址和数组的地址相同 
  5.数组的设计 
*/ 
main(){
  char cArray[] = {'H','E','L','L','O'}; 
  int iArray[] = {1,2,3,4,5};
  //取数组的值
  printf("cArray[0]==%c\n",cArray[0]); 
  printf("iArray[0]==%d\n",iArray[0]); 
  //取内存地址
  printf("cArray地址==%#x\n",&cArray); 
  printf("cArray[0]地址==%#x\n",&cArray[0]); 
  printf("cArray[1]地址==%#x\n",&cArray[1]); 
  printf("cArray[2]地址==%#x\n",&cArray[2]); 
  printf("cArray[3]地址==%#x\n",&cArray[3]); 
    printf("cArray地址==%#x\n",cArray); 
  printf("cArray+0地址==%#x\n",cArray+0); 
  printf("cArray+1地址==%#x\n",cArray+1); 
  printf("cArray+2地址==%#x\n",cArray+2); 
  //内存是一块连续的内存空间 
  printf("iArray地址==%#x\n",&iArray); 
  printf("iArray[0]地址==%#x\n",&iArray[0]); 
  printf("iArray[1]地址==%#x\n",&iArray[1]); 
  printf("iArray[2]地址==%#x\n",&iArray[2]); 
  printf("iArray[3]地址==%#x\n",&iArray[3]);
  printf("iArray地址==%#x\n",iArray); 
  printf("iArray+0地址==%#x\n",iArray+0); 
  printf("iArray+1地址==%#x\n",iArray+1); 
  printf("iArray+2地址==%#x\n",iArray+2); 
  printf("iArray+3地址==%#x\n",iArray+3);
  //用指针去取值
  printf("iArray==%d\n",*iArray); 
  printf("iArray[0]==%d\n",*iArray+0); 
  printf("iArray[1]==%d\n",*iArray+1); 
  printf("iArray[2]==%d\n",*iArray+2); 
  printf("iArray[3]==%d\n",*iArray+3); 
  printf("iArray[0]==%d\n",*(iArray+0)); 
  printf("iArray[1]==%d\n",*(iArray+1)); 
  printf("iArray[2]==%d\n",*(iArray+2)); 
  printf("iArray[3]==%d\n",*(iArray+3)); 
  printf("cArray[0]==%c\n",*(cArray+0)); 
  printf("cArray[1]==%c\n",*(cArray+1)); 
  printf("cArray[2]==%c\n",*(cArray+2)); 
  printf("cArray[3]==%c\n",*(cArray+3)); 
  system("pause");
}

输出到控制台内容如下:

#include<stdio.h>
#include<stdlib.h>
/**
  用户输入一个数组 
*/ 
main(){
  printf("请输入数组的长度:\n");
  //1.用户输入数组的长度
  int length;
  scanf("%d",&length);
  printf("您输入的数组长度为:%d\n",length);
  //2.用户根据用户输入的长度创建数组 
  int iArray[length];
  //3.让用户输入数组的值
  int i;
  for(i=0;i<length;i++){
    printf("请输入iArray[%d]的值:\n",i);
//    scanf("%d",&iArray[i]);
    scanf("%d",iArray+i);
  }
  //4.把数组内容打印出来
  for(i=0;i<length;i++){
//    printf("iArray[%d]的值=%d\n",i,iArray[i]);
    printf("iArray[%d]的值=%d\n",i,*(iArray+i));
  }
  system("pause");
}

输出到控制台内容如下:

五、C语言中的指针长度

#include<stdio.h>
#include<stdlib.h>
/**
  指针的长度 是八个字节 
  在C语言中,指针的长度是由平台的架构和操作系统的位数决定的。
  在大多数32位操作系统中,指针的长度为4字节(32位),而在64位操作系统中,指针的长度为8字节(64位)
*/ 
main(){
  int* iPoint;
  char* cPoint;
  printf("iPoint的长度==%d\n",sizeof(iPoint));
  printf("cPoint的长度==%d\n",sizeof(cPoint)); 
  system("pause");
}

输出到控制台内容如下:

六、C语言中静态内存分配

#include<stdio.h>
#include<stdlib.h>
/**
  静态内存分配地址 
*/ 
void func(int** address){
  //定义int类型的i变量,并且赋值100 
  int i = 100;
  //把i对应的地址赋值给 iPoint 
  *address= &i;
}
main(){
  //定义int类型的一级指针变量iPoint 
  int* iPoint;
  func(&iPoint);
  printf("*iPoint===%d\n",*iPoint);//*iPoint===100  
  printf("*iPoint===%d\n",*iPoint);//*iPoint===0 出现这个的原因是静态内存分配,执行完func()函数后,会被系统回收 
  printf("*iPoint===%d\n",*iPoint);//*iPoint===0
  system("pause");
} 

静态内存是程序编译执行后系统自动分配,由系统自动释放,静态内存是栈分配的。

七、C语言中动态内存分配

#include<stdio.h>
#include<stdlib.h>
/**
  动态内存分配 
*/ 
void func(int** address){
  int i = 100;
  int* temp; 
  //malloc(int)-返回内存地址 
  temp=malloc(sizeof(int));
  //把i对应的值,赋值给temp地址对应的值 
  *temp = i;
  //把address对应的地址,对应的值改为temp 
  *address = temp;
//  free(temp); //回收内存 
}
main(){
  //定义int类型的一级指针变量iPoint 
  int* iPoint;
  func(&iPoint);
  printf("*iPoint===%d\n",*iPoint);//*iPoint===100  
  printf("*iPoint===%d\n",*iPoint);//*iPoint===100
  printf("*iPoint===%d\n",*iPoint);//*iPoint===100
  system("pause");
} 

内存分析图如下:

输出到控制台内容如下:

八、C语言中动态创建数组

#include<stdio.h>
#include<stdlib.h>
/**
  动态创建数组 
*/ 
main(){
  //动态数组的创建
  printf("请输入您要创建数组的长度:\n");
  //1.让用户输入一个长度
  int length;
  scanf("%d",&length);
  printf("您输入的数组长度为:%d\n",length);
  //2.根据长度,分配内存空间 
  int* iArray = malloc(length*4);
  //3.让用户把数组中的元素依次的赋值 
  int i;
  for(i=0;i<length;i++){
    printf("请输入iArray[%d]的值:",i);
    scanf("%d",iArray+i);
  }
  //4.接收用户输入扩展数组长度
  int suppLength;
  printf("请输入您要扩展数组的长度:\n");
  scanf("%d",&suppLength);
  printf("您要扩展数组的长度为:%d\n",suppLength);
  //5.根据扩展的长度重新分配空间 
  iArray = realloc(iArray,(length+suppLength)*4);
  //6.把扩展长度的元素让用户赋值
  for(i=length;i<length+suppLength;i++){
    printf("请输入iArray[%d]的值:",i);
    scanf("%d",iArray+i);
  }
  //7.输出数组
  for(i=0;i<length+suppLength;i++){
    printf("iArray[%d]的值==%d\n",i,*(iArray+i));
  } 
  system("pause");
} 

输出到控制台内容如下:


目录
相关文章
|
6天前
|
C语言
王桂林C语言从放弃到入门课程
课程目标16天,每天6节课,每节40分钟课堂实录,带你征服C语言,让所有学过和没有学过C语言的人,或是正准备学习C语言的人,找到学习C语言的不二法门。适用人群所有学过和没有学过C语言的人,或是正准备学习C语言的人!
33 2
王桂林C语言从放弃到入门课程
|
6天前
|
存储 编译器 C语言
初识C语言——详细入门(系统性学习day4)
初识C语言——详细入门(系统性学习day4)
|
6天前
|
存储 自然语言处理 编译器
C语言从入门到实战——编译和链接
在C语言中,编译和链接是将源代码转换为可执行文件的两个主要步骤。 编译过程包括以下步骤: 1. 预处理:将源代码中的预处理指令(如`#include`和`#define`)替换为实际的代码。 2. 编译:将预处理后的代码转换为汇编语言。 3. 汇编:将汇编语言转换为机器码指令。 链接过程包括以下步骤: 1. 目标文件生成:将每个源文件编译后生成的目标文件(`.o`或`.obj`)进行合并,生成一个总的目标文件。 2. 符号解析:查找并解析目标文件中的所有符号(例如全局变量和函数名),以确保每个符号都有一个唯一的地址。 3. 地址重定位:根据符号表中符号的地址信息,将目标文件中的所有地址引用
43 0
|
6天前
|
编译器 程序员 C语言
C语言从入门到实战——动态内存管理
在C语言中,动态内存管理是指程序运行时,通过调用特定的函数动态地分配和释放内存空间。动态内存管理允许程序在运行时根据实际需要来分配内存,避免了静态内存分配在编译时就确定固定大小的限制。
47 0
|
6天前
|
编译器 Linux PHP
C语言从入门到实战——预处理详解
C语言预处理是C语言编译过程的一个阶段,它在编译之前对源代码进行一系列的处理操作,包括宏替换、文件包含、条件编译等,最终生成经过预处理的代码,然后再进行编译。
48 0
|
6天前
|
存储 缓存 C语言
C语言从入门到实战——文件操作
C语言中的文件操作是通过使用文件指针来实现的。可以使用标准库中的函数来打开、读取、写入和关闭文件。
58 0
|
6天前
|
存储 自然语言处理 编译器
振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)
振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)
|
5天前
|
C语言
C语言——入门分支与循环
C语言——入门分支与循环
4 0
|
6天前
|
编译器 C语言
函数深入解析(C语言基础入门)
函数深入解析(C语言基础入门)
|
6天前
|
C语言
数组深入剖析(C语言基础入门)
数组深入剖析(C语言基础入门)