C语言基础入门详解二

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。
👉点击跳转到教程

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

输出到控制台内容如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/51154.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 moleculer 微服务架构的智能低代码PaaS 平台源码 可视化开发

低代码开发平台源码 低代码管理系统PaaS 平台 无需代码或通过少量代码就可以快速生成应用程序的开发平台。 本套低代码管理后台可以支持多种企业应用场景&#xff0c;包括但不限于CRM、ERP、OA、BI、IoT、大数据等。无论是传统企业还是新兴企业&#xff0c;都可以使用管理后台…

ChatGPT的应用与发展趋势:解析人工智能的新风口

目录 优势 应用领域 发展趋势 总结 在人工智能技术迅猛发展的时代&#xff0c;自然语言处理系统的提升一直是研究者们追求的目标。作为人工智能领域的重要突破之一&#xff0c;ChatGPT以其出色的语言模型和交互能力&#xff0c;在智能对话领域取得了重要的进展。 ChatGPT是…

kubernetes介绍

介绍 Kubernetes 是一个开源的容器编排引擎&#xff0c;用来对容器化应用进行自动化部署、 扩缩和管理。 Kubernetes 这个名字源于希腊语&#xff0c;意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。…

K8S中网络如何通信

Kubernetes 提出了一个自己的网络模型“IP-per-pod”&#xff0c;能够很好地适应集群系统的网络需求&#xff0c;它有下面的这 4 点基本假设&#xff1a; 集群里的每个 Pod 都会有唯一的一个 IP 地址。Pod 里的所有容器共享这个 IP 地址。集群里的所有 Pod 都属于同一个网段。…

SQL-每日一题【626.换座位】

题目 表: Seat 编写SQL查询来交换每两个连续的学生的座位号。如果学生的数量是奇数&#xff0c;则最后一个学生的id不交换。 按 id 升序 返回结果表。 查询结果格式如下所示。 示例 1: 解题思路 前置知识 MySQL 的 MOD() 函数是取模运算的函数&#xff0c;它返回两个数相除…

qt简易闹钟

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->stopBtn->setDisabled(true);this->setFixedSize(this->size()); //设置固定大小this->s…

【C语言进阶】程序环境和预处理

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C语言 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、程序的翻译环境和执行环境 二、详解编译和链接 2.1翻译环境 2.2编译的过…

Windows 10 中无法最大化任务栏中的程序

方法1&#xff1a;仅选择选项 PC 屏幕 如果您使用双显示器&#xff0c;有时这可能会发生在您的 1 台计算机已插入但您正在访问的应用程序正在另一台计算机上运行的情况下&#xff0c;因此您看不到任何选项。因此&#xff0c;请设置仅在主计算机上显示显示的 PC 屏幕选项。 第…

nacos2.2.3最新版启动所遇到的问题总结

前言 有问题就看官方文档&#xff0c;看不懂或者还是报错再看博客&#xff01;因为有时候忙的焦头烂额&#xff0c;却发现官方写的非常清楚&#xff0c;而且人家还自带一个example示例&#xff0c;自己都没有看&#xff0c;自己瞎折腾&#xff01;本人吃过亏&#xff0c;特此提…

抖音seo短视频账号矩阵系统技术开发简述

说明&#xff1a;本开发文档适用于抖音seo源码开发&#xff0c;抖音矩阵系统开发&#xff0c;短视频seo源码开发&#xff0c;短视频矩阵系统源码开发 一、 抖音seo短视频矩阵系统开发包括 抖音seo短视频账号矩阵系统的技术开发主要包括以下几个方面&#xff1a; 1.前端界面设…

uniapp使用uni-swipe-action后右侧多了小于1px的间隙

问题&#xff1a;uniapp使用uni-swipe-action后右侧多了小于1px的间隙。且在真机上没有问题&#xff0c;但是在微信开发者工具中有问题。 代码如下&#xff1a;在滑动滑块或者点击这个区域时&#xff0c;就会出现问题。 <scroll-view :scroll-y"true" :style&quo…

设计模式-命令模式在Java中的使用示例-桌面程序自定义功能键

场景 欲开发一个桌面版应用程序&#xff0c;该应用程序为用户提供了一系列自定义功能键&#xff0c;用户可以通过这些功能键来实现一些快捷操作。 用户可以将功能键和相应功能绑定在一起&#xff0c;还可以根据需要来修改功能键的设置&#xff0c;而且系统在未来可能还会增加…

P5691 [NOI2001] 方程的解数

题目 思路 暴搜显然会TLE&#xff0c;所以这时候就应该请出DFS的伙伴——折半搜索&#xff08;meet in the middle&#xff09;了 折半搜索的思路就是先搜完后一半后&#xff0c;借助这一半的数据来搜索前一半&#xff0c;效率是原来的2倍 这个题怎么才能折半搜索呢&#xff1…

【Linux】更换jdk版本

目录 一、前言二、查看jdk版本号1、项目中的版本号&#xff08;pom.xml&#xff09;2、服务器中的版本号 三、更换jdk版本1、创建java文件夹2、下载并解压JDK安装包①、下载jdk安装包②、移动到创建好的/usr/local/java路径下③、解压jdk安装包 四、删除原来的jdk版本1、删除原…

Qt: 查看qmake相关参数设置

Qt开发中&#xff0c;经常会遇到qmake相关问题&#xff0c;比如同时安装了多个Qt版本的情况。比如我的情况是系统自带了Qt 5.12.8, 但是开发中遇到一些兼容性问题&#xff0c;于是又手动安装了5.9.8。 查看qmake版本&#xff0c;qmake -v, 虽然项目中已经指定了5.9.8, 但是系统…

【力扣每日一题】2023.7.30 环形链表2

题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这道题属于是那种知道解法就很简单&#xff0c;不知道解法就很难独立想出来的那种&#xff0c;我们只需要稍微记住这类题的固定解法就可以。 所以接下来我先说解法&#xff0c;再解释为什么解法可以解出来。 那么我们都…

数值线性代数: 共轭梯度法

本文总结线性方程组求解的相关算法&#xff0c;特别是共轭梯度法的原理及流程。 零、预修 0.1 LU分解 设&#xff0c;若对于&#xff0c;均有&#xff0c;则存在下三角矩阵和上三角矩阵&#xff0c;使得。 设&#xff0c;若对于&#xff0c;均有&#xff0c;则存在唯一的下三…

MyBatis(二)

文章目录 一.MyBatis的模式开发1.1 定义数据表和实体类1.2 配置数据源和MyBatis1.3 编写Mapper接口和增加xxxMapper.xml1.4 测试我们功能的是否实现. 二. Mybatis的增删查改操作2.1 单表查询2.2 多表查询三.动态SQL的实现3.1 什么是动态SQL3.2 动态SQL的使用if标签的使用trim标…

LeetCode559. N 叉树的最大深度

559. N 叉树的最大深度 文章目录 [559. N 叉树的最大深度](https://leetcode.cn/problems/maximum-depth-of-n-ary-tree/)一、题目二、题解方法一&#xff1a;迭代方法二&#xff1a;递归 一、题目 给定一个 N 叉树&#xff0c;找到其最大深度。 最大深度是指从根节点到最远叶…

【机器学习】Multiple Variable Linear Regression

Multiple Variable Linear Regression 1、问题描述1.1 包含样例的X矩阵1.2 参数向量 w, b 2、多变量的模型预测2.1 逐元素进行预测2.2 向量点积进行预测 3、多变量线性回归模型计算损失4、多变量线性回归模型梯度下降4.1 计算梯度4.2梯度下降 首先&#xff0c;导入所需的库 im…