当前位置: 首页 > news >正文

FX-数组的使用

1一维数组

1.1一维数组的创建和初始化

1.1.1数组的创建

//代码1
int arr1[10];
char arr2[10];
float arr3[1];
double arr4[20];
//代码2
//用宏定义的方式
#define X 3
int arr5[X];
//代码3
//错误使用
int count = 10;
int arr6[count];//数组时候可以正常创建?

:数组创建, [] 中要给一个常量才可以,不能使用变量。可以直接用常量,或者使用宏定义。

1.1.2数组的初始化

//1.数组大小和数值个数一致
int arr1[5] = {1,2,3,4,5}; 1 2 3 4 5//2.数组大小大于初始数
int arr2[6] = {1,2,3};  1 2 3 0 0 0//3.不指定数组大小
int arr3[] = {1,2,3,4};  1 2 3 4//4.不指定字符数组大小
char arr5[] = {'a','b','c'}; a b c//5.1字符数组存储字符串
char arr6[] = "abcdef"; a b c d e f \0//5.2字符数组的大小和字符串字符个数一致时
char arr6[6] = "abcdef"; a b c d e f
!!这样初始化是有问题的,因为无法正常读取字符串的结束标志('\0'),导致字符串的长度和内容不能得知!!//6.字符数组大小大于字符串中的字符数char arr7[6] = "zxc"; z x c \0 \0 \0

结论

  1. 数组是具有相同类型的集合,数组的大小(即所占字节数)由元素个数乘以单个元素的大小。
  2. 数组只能够整体初始化,不能被整体赋值。只能使用循环从第一个逐个遍历赋值。
  3. 初始化时,数组的维度或元素个数可忽略 ,编译器会根据花括号中元素个数初始化数组元素的个数。
  4. 当花括号中用于初始化值的个数不足数组元素大小时,数组剩下的元素依次用0初始化。
  5. 字符型数组在计算机内部用的时对应的ascii码值进行存储的。
  6. 一般用”“引起的字符串,不用数组保存时,一般都被直接编译到字符常量区,并且不可被修改。

在内存中的存储

 1.2一维数组的使用

#include <stdio.h>
int main()
{int arr[10] = { 0 };//数组的不完全初始化//计算数组的元素个数int sz = sizeof(arr) / sizeof(arr[0]);//对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:int i = 0;//做下标,此时可以是变量for (i = 0; i < 10; i++){arr[i] = i;}//输出数组的内容for (i = 0; i < 10; ++i){printf("%d ", arr[i]);}return 0;
}

注意:

sizeof()操作符用于取长度,以字节为单位。sizeof(数组名)即求的时整个数组的大小。sizeof(首元素)即求数组单个元素大小。用0下标,是因为数组至少存在一个有效元素,所以0下标永远存在。
数组是使用下标来访问的,下标是从0开始。
数组的大小可以通过计算得到。建议采用sizeof(arr)/sizeof(arr[0])这种方式。

1.3一维数组在内存中的存储

#include <stdio.h>
int main()
{int arr[10] = { 0 };int size = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < size; ++i){printf("&arr[%d] = %p\n", i, &arr[i]);}return 0;
}

仔细观察输出的结果,可知随着数组下标的增长,元素的地址,也在有规律的递增。 由此可以得
出结论:数组在内存中是连续存放的

 

总结:

  1. 数组在内存中开辟是线性连续且递增的。
  2. 在c语言中,任何变量(基本变量,指针变量,结构体变量,数组变量)的空间都是整体开辟,但任何元素的起始地址一定是开辟字节当中最小的。

 2.二维数组

2.1二维数组的创建和初始化

2.1.1二维数组的创建

//数组创建
int arr[3][4];//[行数][列数]
char arr[][5];
double arr[2][4];

 二维数组创建时,行数可以忽略不写。并且所有维度的数组其第一个方括号的内容可忽略。

2.1.2二维数组的初始化

//数组初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}};

注意:
花括号中的一个花括号代表一个一维数组的初始化。当里面无花括号分组时,按照顺序从第一个开始逐个进行初始化。余下的未赋值的元素用0初始化。

2.2二维数组的使用

二维数组的使用也是通过下标的方式,用双重循环嵌套进行索引使用。

#include <stdio.h>
int main()
{int arr[3][4] = { 0 };int i = 0;for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 4; j++){arr[i][j] = i * 4 + j;}}for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 4; j++){printf("%d ", arr[i][j]);}}return 0;
}

2.3二维数组在内存中的存储

#include <stdio.h>
int main()
{int arr[3][4];int i = 0;for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 4; j++){printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);}}return 0;
}

通过结果我们可以分析到,其实二维数组在内存中也是连续存储的。

 

注意:

  1. 二维数组在内存的空间布局上,也是线性连续且递增的!!!
  2. 二维数组本质上也是一维数组,只不过内部元素放的是一维数组

3.数组作为参数

  1. 调用函数传参数组时,减少函数传数组时的成本问题(时间和空间)。因为传参时,需要临时拷贝,如果数组过大,可能会浪费资源,严重的话可能栈溢出。
  2. 数组元素降维成指向数组内部元素类型指针
  3. 对指针加一,加上所指向的类型的大小。

 3.1一维数组

#include<stdio.h>void Lisa(int arr[])
{printf("a = %d\n", sizeof(arr));//数组降维成指针后的指针大小,在32位系统下指针都为4字节printf("b = %d\n", sizeof(arr[0]));//数组首元素的大小printf("sz =a / b  = %d\n", sizeof(arr) / sizeof(arr[0]));//大小为1printf("arr = %p\n", arr);//数组首元素地址printf("&arr = %p\n", &arr);//指针的地址printf("arr + 1 = %p\n", arr + 1);//下一个元素的地址printf("&arr + 1 = %p\n", &arr + 1);//指针下一项的地址
}int main(void)
{int Shuzu[10] = { 0,1,2,3,4,5,6,7,8,9 };printf("a = %d\n", sizeof(Shuzu));//数组总大小printf("b = %d\n", sizeof(Shuzu[0]));//数组首元素大小printf("sz =a / b = %d\n", sizeof(Shuzu) / sizeof(Shuzu[0]));//数组元素个数printf("Shuzu = %p\n", Shuzu);//数组首元素地址printf("&Shuzu = %p\n", &Shuzu);//代表整个数组,但是地址仍是首元素地址printf("Shuzu + 1 = %p\n", Shuzu + 1);//下一个元素的地址printf("&Shuzu + 1 = %p\n", &Shuzu + 1);//跳过整个数组后紧挨着的地址//此时该地址减去首元素地址等于数组大小printf("\n\n");Lisa(Shuzu);return 0;
}

补充

  1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。
  2. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组。

 

 

总结:

  1. 形参格式,例如int arr[ ]或者int *arr,两者等价
  2. 形参元素个数可被忽略,并且建议忽略(有可能改变了实参的大小,这样比较方便)。或者也可以填写比实参元素个数大的值。
  3. sizeof()求数组元素个数时,尽量在数组定义时求。因为传参后数组会降维成指针。

 3.2二维数组

#include<stdio.h>void Lisa(int arr[][4])
{printf("a = %d\n", sizeof(arr));//数组降维成指针后的指针大小,在32位系统下指针都为4字节printf("b = %d\n", sizeof(arr[0][0]));//数组首元素的大小printf("sz =a / b  = %d\n", sizeof(arr) / sizeof(arr[0][0]));//大小为1printf("arr = %p\n", arr);//数组首元素地址printf("arr + 1 = %p\n", arr + 1);//下一个元素的地址printf("&arr = %p\n", &arr);//指针的地址printf("&arr + 1 = %p\n", &arr + 1);//指针下一项的地址
}int main(void)
{int Shuzu[3][4] = { 0,1,2,3,4,5,6,7,8,9 };printf("a = %d\n", sizeof(Shuzu));//数组总大小printf("b = %d\n", sizeof(Shuzu[0][0]));//数组首元素大小printf("sz =a / b = %d\n", sizeof(Shuzu) / sizeof(Shuzu[0][0]));//数组元素个数printf("Shuzu = %p\n", Shuzu);//数组首元素地址printf("Shuzu + 1 = %p\n", Shuzu + 1);//下一个元素的地址,这时其内部元素的一维数组printf("&Shuzu = %p\n", &Shuzu);//代表整个数组,但是地址仍是首元素地址printf("&Shuzu + 1 = %p\n", &Shuzu + 1);//跳过整个数组后紧挨着的地址//此时该地址减去首元素地址等于数组大小printf("\n\n");Lisa(Shuzu);return 0;
}

 

 

形参格式,例如:int arr[][4]或者int (*arr)[4],这里为指向具有四个整型元素的一维数组的数组指针。除了第一个中括号里的数字可以省,后面的中括号的内容不能省略,因为下标是数组类型的一部分,省略掉就不明确其类型。
注意:
看待所有的数组时,都将它看作一维数组,只不过其内部元素不一样,例如:三维数组其内部元素为二维数组,而二维数组也是有一维数组组成,都是线性连续且相等的。

4.数组指针和指针数组

  • 数组指针:是指针,指向数组。例:int (*arr)[10]
  • 指针数组:是数组,数组内容存放的是指针。例:int *arr[10]

然后,需要明确一个优先级顺序:()>[]>*
所以:
(*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,这是“数组的指针”,即数组指针;
*p[n]:根据优先级,先看[],则p是一个数组,再结合*,这个数组的元素是指针类型,共n个元素,这是“指针的数组”,即指针数组。

4.1指针数组

#include<stdio.h>int main(void)
{int *p[4];int arr1[3] = { 1,2,3 };int arr2[4] = { 2,4,6,8 };int arr3[5] = { 0 };int arr4[2] = { 2,2 };p[0] = arr1;p[1] = arr2;p[2] = arr3;p[3] = arr4;printf("%d\n", *(p[0] + 1));printf("%d\n", *(p[1] + 1));printf("%d\n", *(p[2] + 1));printf("%d\n", *(p[3] + 1));return 0;
}

首先,对于语句int*p[4],因为[ ]的优先级要比*要高,所以 p 先与[ ]结合,构成一个数组的定义,数组名为 p,而int*修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 4 个指向int类型数据的指针,如图所示,因此,它是一个指针数组。

4.2数组指针

#include<stdio.h>int main(void)
{int Shuzu[3][4] = { 0,1,2,3,4,5,6,7,8,9,0,0 };int(*arr)[4] = Shuzu;for (int i = 0;i < 3;i++){for (int j = 0;j < 4;j++){printf("arr[%d][%d]=%d  ", i,j,arr[i][j] );}printf("\n");}return 0;
}

 

其次,对于语句int(*arr)[4],“( )”的优先级比[ ]高,*号和 arr 构成一个指针的定义,指针变量名为 arr,而 int 修饰的是数组的内容,即数组的每个元素。也就是说,arr 是一个指针,它指向一个包含 4 个int类型数据的数组,如图 所示。很显然,它是一个数组指针。

 

 

相关文章:

FX-数组的使用

1一维数组 1.1一维数组的创建和初始化 1.1.1数组的创建 //代码1 int arr1[10]; char arr2[10]; float arr3[1]; double arr4[20]; //代码2 //用宏定义的方式 #define X 3 int arr5[X]; //代码3 //错误使用 int count 10; int arr6[count];//数组时候可以正常创建&#xff1…...

springboot283图书商城管理系统

图书商城管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本图书商城管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理…...

FFmpeg-- c++实现:音频流aac和视频流h264封装

文章目录 流程api核心代码muxer.hmuxer.cpp aac 和 h264 封装为视频流&#xff0c;封装为c的Muxter类 流程 分配视频文件上下文 int Init(const char *url); 创建流&#xff0c;赋值给视频的音频流和视频流 int AddStream(AVCodecContext *codec_ctx); 写视频流的head int Se…...

单片机烧录方式,JTAG,ISP,SWD,

常见的词汇 参考 ISP&#xff1a;In System Programing&#xff0c;在系统编程 IAP&#xff1a;In Application Programing&#xff0c;在应用编程 ICP&#xff1a;In Circuit Programing&#xff0c;在电路编程 ICSP全称是In Circuit Serial Programming JTAG(Joint Test Act…...

【项目管理后台】Vue3+Ts+Sass实战框架搭建一

项目管理后台 建立项目最好是卸载Vetur 新建.env.d.ts文件安装Eslint安装校验忽略文件添加运行脚本 安装prettier新建.prettierrc.json添加规则新建.prettierignore忽略文件 安装配置stylelint新建.stylelintrc.cjs 添加后的运行脚本配置husky配置commitlint配置husky 强制使用…...

基于python 变配电室运行状态评估与预警系统flask-django-nodejs-php

变配电室电气设备运行状态和环境信息缺乏必要的监测评估预警手段&#xff0c;如有一日遭遇突发情况&#xff0c;将危及电气设备安全稳定运行,易造成设备损坏和电力供应中断[2]。 目前&#xff0c;我国变配电室常采用无人管理的室内站设计方案&#xff0c;长期以来变配电室运维工…...

【自记录】VS2022编译OpenSSL1.0.2u

因为突然要编译一个老工程&#xff0c;老工程里面用到了OpenSSL 1.0.x。 于是官网下载了最后一个1.0.x版本1.0.2u。 1 下载安装Perl 去Perl官网下载即可。 使用vcpkg直接安装也可以&#xff0c;比前者更方便 vcpkg install perl #根据实际路径调整 set PATHD:\vcpkg\downloa…...

ES代替品:轻量级搜索引擎MeiliSearch

痛点 虽然Elasticsearch足够灵活强大、扩展性和实时性也较好。但是对于中小型项目来说&#xff0c;Elasticsearch还是显得有些庞大&#xff0c;对硬件设备的要求也较高。那么&#xff0c;在要求不是很高的情况下&#xff0c;我们可以考虑另一种搜索引擎方案&#xff1a;MeiliSe…...

用C语言打造自己的Unix风格ls命令

在Unix或类Unix操作系统中&#xff0c;ls是一个非常基础且实用的命令&#xff0c;它用于列出当前目录或指定目录下的文件和子目录。下面&#xff0c;我们将通过C语言编写一个简化的ls命令&#xff0c;展示如何利用dirent.h头文件提供的函数接口实现这一功能。 #include "…...

git的起源

开篇一张图&#xff1a; 开源项目linux kernel开发&#xff0c;参与开发与维护者众多。1991至2005年期间绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上。 在2002 年&#xff0c;整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维…...

软件杯 深度学习 python opencv 火焰检测识别

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…...

C# double类型计算精度问题解决

问题&#xff1a;res 的值0.112450000001&#xff0c;精度不对&#xff0c;预期是0.11245 double force112.45&#xff1b; double res force / Math.Pow(10, index * 3); double force112.45; double res force / Math.Pow(10, index * 3); string str res.ToString(&qu…...

基于Springcloud+Vue校园招聘系统 Eureka分布式微服务

以行动研究为主&#xff0c;辅以文献法、教育实验法和个案研究法等方法相结合的研究方法。在研究方法&#xff0c;遵循软件工程中软件生命周期的规则。概括来讲可以划分成三大步&#xff1a;系统规划、系统开发和系统运行维护。将其上述步骤细分下来&#xff0c;可以分为以下8小…...

【NLP笔记】RNN总结

文章目录 经典RNN单向RNN双向RNNDeep RNNRNN特性总结 变体RNNLSTMGRU 参考及转载内容&#xff1a; 循环神经网络&#xff08;RNN&#xff09;深度学习05-RNN循环神经网络完全理解RNN&#xff08;循环神经网络&#xff09; 传统的CNN&#xff08;Covolutional Neural Network&am…...

[c++]内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] "abcd"; const char* pChar3 "abcd"; …...

k8s通过编排文件,实现服务的滚动更新

k8s通过编排文件&#xff0c;实现服务的滚动更新 apiVersion: apps/v1 kind: pod metadata:name: ‘servicename’labels:app: ‘servicename’ spec:replicas: 4 ##pod启动数量最少为2&#xff0c;不然滚动更新无意义strategy:type: RollingUpdate ##设置类型为滚动更新以及…...

安卓面试题多线程 96-100

96. 简述notify()和notifyAll()有什么区别 ?notify可能会导致死锁,而notifyAll则不会任何时候只有一个线程可以获得锁,也就是说只有一个线程可以运行synchronized 中的代码 使用notifyall,可以唤醒 所有处于wait状态的线程,使其重新进入锁的争夺队列中,而notify只能唤醒一…...

第二十六章 配置 Web Gateway 的默认参数

文章目录 第二十六章 配置 Web Gateway 的默认参数网络网关实例主机名最大连接数最大缓存大小网络服务器 ID Cookie 第二十六章 配置 Web Gateway 的默认参数 本页介绍如何通过 Web Gateway 管理页面配置 IRIS Web Gateway 的默认参数。其他文章介绍了如何配置服务器和应用程序…...

npm i安装依赖报错,但是cnpm i 却安装成功

问题描述&#xff1a;在a项目中npm i 安装依赖时发生以上报错&#xff0c;但是cnpm i 却成功&#xff0c;而且在其他项目中npm i 安装其他项目依赖也能成功.... 解决办法&#xff1a;删除项目中package-lock.json文件后再npm i 即可...

C语言经典算法-9

文章目录 其他经典例题跳转链接46.稀疏矩阵47.多维矩阵转一维矩阵48.上三角、下三角、对称矩阵49.奇数魔方阵50.4N 魔方阵51.2(2N1) 魔方阵 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠走迷官&#xff08;一&#xff09;6.…...

React 19的变化

并发模式&#xff08;非实验&#xff09;: React 的并发模式终于从实验阶段毕业了。这一改变游戏规则的功能允许 React 应用程序同时准备多个版本的 UI。有着更平滑的过渡和更灵敏的用户体验&#xff0c;因为 React 现在可以处理高优先级更新&#xff0c;同时保持应用程序的交互…...

Kafka整理-Kafka与传统消息队列系统(如RabbitMQ, ActiveMQ)的区别是什么?

Apache Kafka与传统消息队列系统(如RabbitMQ, ActiveMQ)虽然都是处理消息和数据流的中间件,但它们在设计理念、架构、功能和使用场景方面有显著的区别。下面是Kafka与传统消息队列系统的主要区别: 1. 设计目的和使用场景 Kafka: 设计初衷是为处理大量的实时数据流。强调高…...

汽车电子零部件(8):T_Box

前言: 网联汽车(Connected Vehicles ,CV)是一个广泛的概念,四个主要的CV线程已发展起来:互联、自主、共享和电动。这些应用于包括CV在内的垂直领域:汽车、通信、互联网和共享手机服务。中国汽车工程师学会(SAEC)提倡将车载ADAS(高级驾驶员辅助系统)与通信技术相结合…...

数库据设计最佳实践

中老年程序员&#xff0c;从业生涯设计过很多数据库&#xff0c;有用上的也有没用上的&#xff0c;有精心设计花无数心思更改了无数次的也有敷衍了事能用就行的&#xff0c;有最糟糕的设计也有感觉还不错的。在设计和修改过程中有很多疑问和感悟&#xff0c;在此记录一下以方便…...

ESSBAE 数据挖掘

essbase数据挖掘框架 1.算法&#xff1a;用来分析数据的方法 2.模型&#xff1a;系列的算法集合 3.任务&#xff1a;数据挖掘的步骤 4.任务模板&#xff0c;可以重复执行的任务 数据挖掘任务&#xff1a; 明确任务 建立及训练模型 测试模型 执行任务 为模型打分 ess…...

在Linux/Ubuntu/Debian中使用iFuse访问iOS 设备(例如 iPhone 或 iPad)上的文件可双向复制粘贴

iFuse 是一款工具&#xff0c;可让你在 Linux 系统上安装 iOS 设备&#xff08;例如 iPhone 或 iPad&#xff09;&#xff0c;使你能够访问其文件系统并与设备传输文件。 以下是有关如何使用 iFuse 的基本指南&#xff1a; 安装依赖项&#xff1a;在安装 iFuse 之前&#xff0c…...

驱动开发中的DMA是什么

DMA是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。 使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来&#xff0c; 从而大大提高系统的吞吐率。 DMA通常与硬件体系结构&#xff0c; 特别是外设的总线技术密切相关。 DMA方式的数据传输由DM…...

websocket 升级协议时的协议切换点

websocket 的 rfc6455 标准中提到了协议升级&#xff0c;从http协议升级到websocket协议&#xff0c;用的办法是在http的request header中包含Connection: upgrade 和 Upgrade: websocket 以及其他验证相关的头。服务器验证通过后发送 respond&#xff0c;并升级到websocket。但…...

在Linux中开发C++

在Linux中开发C 本文档为本人在学习慕课网课程——[重学C &#xff0c;重构你的C知识体系]时的一些记录与思考&#xff0c;侵删。学习课程请支持正版&#xff01; 1. 搭建C/C编译环境 1.1 gcc 和 g 的区别 ​ 本质上没有太大区别&#xff0c;gcc 默认使用 c 编译器&#xf…...

【linux】Debian访问Debian上的共享目录

要在Debian系统上访问共享目录&#xff0c;通常意味着要访问通过网络共享的文件夹&#xff0c;比如通过SMB/CIFS&#xff08;Server Message Block/Common Internet File System&#xff09;协议共享的Windows共享文件夹。以下是访问共享目录的步骤&#xff1a; 1. 安装必要的…...

做美陈3d模型网站/品牌关键词排名优化怎么做

解释性语言语言&#xff1a;python/shell/ruby等脚本语言 编译性语言&#xff1a;C/C 作为一种Shell编程习惯 应该总是把变量取值放在双引号之中&#xff0c;如[ “$VAR” ‘abc’ ] 常识 1.脚本文件以 #! 开头&#xff0c;用于指定命令解释器 2.如何执行脚本&#xff1f; (…...

台州北京网站建设/全媒体广告加盟

Long long ago…. 不知道从何时开始喜欢绘画 好像是从小学跟玩伴一起画漫画开始吧 那时候都是闹着玩的 那些漫画现在还在不在我都不记得了 想到这我真的好想回去看一看当年的杰作 伴随着太多的回忆。 但真正开始画的有点模样是从初中才开始的 那是我的同桌—一个可爱的小妮子 要…...

网站建设策划 流程/外贸独立站建站

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85639226 &#x1f964; 毕业设计 题目&#xff1a;基于四元数变换的彩色图像水印算法设计与实现变换算法&#xff1a;QDFRNT, 四元数分数阶随机变换、QDFRFT, 四元数分数阶傅里叶变换水印算法&#…...

深圳梵高网站建设服务/网站流量统计系统

JDK Java Development Kit JAVA开发工具包JRE Java Runtime Enviroment JAVA运行环境JVM Java Virtual Machine JAVA虚拟机 JDK&#xff1a;是程序员使用java语言编写java程序所需的开发工具包&#xff0c;是提供给程序员使用的。JDK包含了JRE&#xff0c;同时还包含了编译j…...

西安哪家公司做网站好/引擎优化seo是什么

一、实现思想1.application(ServletContext)是保存在服务器端的作用域&#xff0c;我们在application中保存两种形式的键值对&#xff1a;1&#xff1a;&#xff0c;2&#xff1a;2.每当一个用户登录时(将生成一个新的session)&#xff0c;首先根据userId在application中查询se…...

广告设计制作公司简介/seo站长论坛

----start 大家对IF ELSE语句可能都很熟悉&#xff0c;它是用来对过程进行控制的。在SQL的世界中CASE语句语句有类似的效果。下面简单的介绍CASE语句的用法。考虑下面的情况&#xff0c;假设有个user表&#xff0c;定义如下&#xff1a; CREATE TABLE USER(NAME VARCHAR(20) N…...