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");
} 

输出到控制台内容如下:


目录
相关文章
|
1月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
52 2
|
1月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
30 1
|
1月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
3月前
|
C语言
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
4月前
|
存储 Java C语言
【C语言入门】初识C语言:掌握编程的基石
【C语言入门】初识C语言:掌握编程的基石
67 4
【C语言入门】初识C语言:掌握编程的基石
|
3月前
|
NoSQL Java 编译器
C语言从入门到精通该怎样学?
持续学习与实践:编程是一门需要不断学习和实践的技能,要保持对新技术和新知识的敏感性,并持续进行编程实践。
57 1
|
4月前
|
存储 Java 程序员
【C语言入门】C语言入门:探索编程世界的基础概念
【C语言入门】C语言入门:探索编程世界的基础概念
105 2
|
4月前
|
前端开发 C语言 C++
C语言入门02---环境搭建
C语言入门02---环境搭建
|
5月前
|
存储 Web App开发 算法
c语言的简单入门
熟悉c语言(简单入门)
|
5月前
|
JavaScript C语言