【C语言初阶】C语言数组基础:从定义到遍历的全面指南
📝个人主页🌹:Eternity._
⏩收录专栏⏪:C语言 “ 登神长阶 ”
🤡往期回顾🤡:C语言函数
🌹🌹期待您的关注 🌹🌹
❀数组
- 📒1. 什么是数组?
- 🌸数组的特点
- 🌺数组的应用
- 📜2. 一维数组
- 🌈数组的创建
- 🌞数组的初始化
- 🌙数组的使用
- ⭐数组在内存中的存储
- 📚3. 二维数组
- 🌈数组的创建
- 🌞数组的初始化
- 🌙数组的使用
- ⭐数组在内存中的存储
- 📙4. 数组越界
- 📝5. 数组作为函数参数
- ⛰️数组作为函数参数错误设计
- 🏞️数组名
- 🌄正确设计
- 📖6. 总结
🔍前言: 在编程的世界里,数据结构是构建复杂应用程序的基石,而数组则是这些基石中最基础且最不可或缺的一种。C语言,作为一门历史悠久且广泛应用于系统编程、嵌入式开发等领域的编程语言,其数组的概念与操作更是每一位C语言学习者必须掌握的核心技能
数组,简而言之,是一种连续存储相同类型数据的集合。它允许我们通过索引(或下标)快速访问其中的元素,无论是读取还是修改,都极为高效。C语言中的数组不仅支持一维形式,还可以轻松扩展到多维,为处理复杂数据提供了极大的便利
本文旨在全面而深入地介绍C语言数组的基本概念、声明与初始化、访问与遍历、以及多维数组的应用等关键内容。通过理论讲解与实例演示相结合的方式,我们将逐步揭开C语言数组的神秘面纱,帮助读者建立扎实的数组知识基础,并掌握在实际编程中灵活应用数组的技巧
让我们一同踏上这段充满挑战与收获的C语言数组之旅吧!
📒1. 什么是数组?
数组(Array)是一种基础的数据结构,用于在计算机内存中连续存储相同类型的数据。它允许通过索引(或下标)来访问这些数据元素,索引通常是从0开始的。数组中的每个元素可以通过计算偏移量来快速定位,这使得数组在访问元素时非常高效
🌸数组的特点
- 类型一致性: 数组中的所有元素都必须是相同的数据类型。这意味着,如果你有一个整型数组,那么数组中的所有元素都必须是整数
- 固定大小: 在大多数编程语言中,数组的大小在声明时就必须确定,并且之后不能改变(尽管有些语言支持动态数组或类似的数据结构,如C++的std::vector或Python的列表,它们提供了动态大小的数组功能)。然而,在C99标准中,C语言引入了变长数组(VLA),其大小可以在运行时确定,但这仍然受到栈大小等限制
- 索引访问: 数组中的元素可以通过索引来访问,索引通常是从0开始的。例如,在C语言中,如果你有一个名为arr的数组,并且你想要访问它的第一个元素,你可以使用arr[0]
- 内存连续性: 数组中的元素在内存中是连续存储的。这意味着,如果你知道数组中某个元素的地址,你可以很容易地计算出数组中其他元素的地址
🌺数组的应用
- 存储和处理一系列的数据,如学生的成绩、商品的库存量等
- 作为函数参数传递数据集合
- 实现算法,如排序、搜索等
- 字符串处理,因为字符串在C语言中是通过字符数组来实现的
- 表示多维数据结构,如矩阵和表格
尽管数组是编程中非常基础且强大的工具,但它们也有一些局限性,比如大小固定(对于传统数组而言)和类型单一。因此,在需要更灵活的数据结构时,程序员可能会选择使用其他数据结构,如链表、树或图等。然而,对于许多常见的编程任务来说,数组仍然是首选的数据结构之一
📜2. 一维数组
数组是一组相同类型元素的集合
🌈数组的创建
数组的创建方式:
type_t arr_name [const_n];
// type_t 是指数组的元素类型
// const_n 是一个常量表达式,用来指定数组的大小
数组创建代码示例 (C语言):
//代码1
int arr1[10];//代码2
int count = 10;
int arr2[count];//代码3
char arr3[10];
float arr4[1];
double arr5[20];
注意:我们来看一下代码二,数组创建,在C99标准之前, [ ]
中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化
🌞数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)
数组的初始化:
int arr1[10] = { 1,2,3 };
int arr2[] = { 1,2,3,4 };
int arr3[5] = { 1,2,3,4,5 };
char arr4[3] = { 'a',98, 'c' };
char arr5[] = { 'a','b','c' };
char arr6[] = "abcdef";
数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初始化的内容来确定
注意:要区分以下这两种数组初始化
char arr1[] = "abc";
char arr2[3] = { 'a','b','c' };
🌙数组的使用
对于数组的使用我们之前介绍了一个操作符: [] ,下标引用操作符。它其实就数组访问的操作符
数组的使用:
int main()
{int arr[10] = { 0 };//数组的不完全初始化//计算数组的元素个数int sz = sizeof(arr) / sizeof(arr[0]);//对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:int i = 0;//做下标// for循环遍历数组for (i = 0; i < sz; i++){arr[i] = i;}//输出数组的内容i = 0;// while循环遍历数组while (i < sz){printf("%d ", arr[i]);i++;}return 0;
}
通过示例:
- 数组是使用下标来访问的,下标是从0开始
- 数组的大小可以通过计算得到
int arr[10];
int sz = sizeof(arr)/sizeof(arr[0]);
⭐数组在内存中的存储
代码示例 (C语言):
int main()
{int arr[10] = { 0 };int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; ++i){printf("&arr[%d] = %p\n", i, &arr[i]);}return 0;
}
注意:仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增
由此可以得出结论:数组在内存中是连续存放的
📚3. 二维数组
二维数组(也称为矩阵)是计算机科学中常用的数据结构,用于存储具有两个维度的数据集合。简单来说,它是一个数组的数组,即每个元素本身也是一个数组。二维数组在图像处理、游戏开发、数据分析、科学计算等领域有广泛应用
🌈数组的创建
数组的创建方式:
type_t arr_name [const_n][const_m];
// type_t 是指数组的元素类型
// const_n 表示行的大小
// const_m 表示列的大小//数组创建
int arr[3][4];
char arr[3][5];
double arr[2][4];
🌞数组的初始化
数组的初始化方式:
//数组初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}};
// 二维数组如果有初始化,行可以省略,列不能省略
🌙数组的使用
二维数组的使用也是通过下标的方式
数组的遍历:
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]);}printf("\n");}return 0;
}
⭐数组在内存中的存储
我们来打印以下二维数组的地址看看
内存中的存储:
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;
}
我们可以看出来,其实二维数组在内存中也是连续存储的
📙4. 数组越界
数组越界(Array Bounds Violation 或 Index Out of Bounds)是编程中常见的一个错误,主要发生在尝试访问数组时,使用的索引超出了数组的有效范围。在大多数编程语言中,数组索引是从0开始的,因此,对于一个长度为n的数组,有效的索引范围是0到n-1。如果尝试访问索引为n或更大的元素,就会发生数组越界错误
数组的下标是有范围限制的
数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1
所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,
所以程序员写代码时,最好自己做越界的检查
数组越界:
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i <= 10; i++){printf("%d\n", arr[i]);//当i等于10的时候,越界访问了}return 0;
}
注意:二维数组的行和列也可能存在越界
数组越界的影响
- 程序崩溃: 在许多编程语言中,如C/C++、Java,数组越界通常会导致程序崩溃或抛出异常,因为系统不允许访问未分配的内存区域。
- 数据损坏: 在某些情况下,如果数组越界没有被系统捕获,可能会覆盖或损坏内存中的其他数据,导致难以跟踪的错误。
- 安全漏洞: 在安全敏感的应用程序中,数组越界可能被恶意用户利用来执行未授权的操作或访问敏感数据
📝5. 数组作为函数参数
数组作为函数参数在C或C++等编程语言中是一个常见的操作。然而,当数组作为函数参数传递时,它并不直接传递整个数组的内容,而是传递了数组的首地址(即数组第一个元素的地址)。这意味着函数内部对数组的任何非本地(即不在函数内部定义的)修改都会影响到原始数组
⛰️数组作为函数参数错误设计
代码示例 (C语言):
void bubble_sort(int arr[])
{int sz = sizeof(arr) / sizeof(arr[0]);//这样对吗?int i = 0;for (i = 0; i < sz - 1; i++){int j = 0;for (j = 0; j < sz - i - 1; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
}
int main()
{int arr[] = { 3,1,7,5,8,9,0,2,4,6 };bubble_sort(arr);//是否可以正常排序?for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){printf("%d ", arr[i]);}return 0;
}
此处冒泡排序并不能发挥作用
注意:数组作为函数参数的时候,并不是把整个数组的传递过去,而是传的是首元素的地址
🏞️数组名
数组名的含义代码示例 (C语言):
int main()
{int arr[10] = { 1,2,3,4,5 };printf("%p\n", arr);printf("%p\n", &arr[0]);printf("%d\n", *arr);//输出结果return 0;
}
结论: 数组名是数组首元素的地址(有两个例外)
数组名是首元素地址,但是计算大小不适用
int arr[10] = {0};
printf("%d\n", sizeof(arr)); // 40
两个例外:
- sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组
- &数组名,取出的是数组的地址。&数组名,数组名表示整个数组
🌄正确设计
void bubble_sort(int arr[], int sz)//参数接收数组元素个数
{int i = 0;for (i = 0; i < sz - 1; i++){int j = 0;for (j = 0; j < sz - i - 1; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
}
int main()
{int arr[] = {3,1,7,5,8,9,0,2,4,6};int sz = sizeof(arr)/sizeof(arr[0]);// 我们先计算好数组的大小bubble_sort(arr, sz);for(int i=0; i < sz; i++){printf("%d ", arr[i]);}return 0;
}
📖6. 总结
在探索C语言数组的旅程即将结束之际,我们不禁要回顾这一路上所见的风景与收获。数组,作为C语言乃至众多编程语言中的基石之一,其重要性不言而喻。它不仅是我们存储和操作一系列相同类型数据的高效工具,更是构建复杂数据结构(如矩阵、字符串等)的基础
通过本文的介绍,我们深入了解了C语言数组的定义、初始化、访问以及通过循环遍历数组的方法。我们见证了数组如何帮助解决一系列实际问题,从简单的数学计算到复杂的数据处理,数组都以其独特的方式展现出了其强大的功能性和灵活性
然而,正如任何强大的工具一样,数组的使用也需要谨慎。越界访问、内存泄漏等问题是我们在使用数组时不得不面对的挑战。因此,掌握良好的编程习惯,如在使用前检查数组边界、合理管理内存等,对于避免潜在的问题至关重要
让我们在掌握C语言函数的基础上,继续保持对编程的热情与好奇心,勇于探索未知,不断挑战自我!!!
希望本文能够为你提供有益的参考和启示,让我们一起在编程的道路上不断前行!
谢谢大家支持本篇到这里就结束了,祝大家天天开心!
相关文章:
【C语言初阶】C语言数组基础:从定义到遍历的全面指南
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言函数 🌹🌹期待您的关注 🌹🌹 ❀数组 📒1. 什么是数组…...
AI开源战争的真相
引言 在AI技术迅猛发展的今天,开源与闭源之争成为了AI圈内最热的话题之一。大模型免费开放的背后到底隐藏着什么样的真相?这是一个令人困惑的问题。本文将深入探讨开源与闭源之争的历史背景、技术演进以及商业利益的博弈。 开源概念的起源 开源软件的…...
使用Java填充Word模板的技术详解
目录 概述常见的Java Word处理库 Apache POIAspose.Words for JavaDocx4j 使用Apache POI填充Word模板 创建和读取Word文档填充文本填充表格 使用Aspose.Words for Java填充Word模板 创建和读取Word文档填充文本填充表格 使用Docx4j填充Word模板 创建和读取Word文档填充文本填…...
vmware配置centos+配置静态ip联网+更换镜像
centos7配置参考【实战】VMware17虚拟机以及Centos7详细安装教程-CSDN博客 ip配置步骤: 先更改编辑虚拟网络编辑器中的内容 就按照还原默认设置来,设定后就是以上内容,然后一定要记住子网ip和子网掩码 接下来就是NAT设置: 网关…...
广州数据中心服务器搬迁方案
设备搬迁的准备工作涵盖资料准备、环境准备、计划细化等工作。资料准备主要是对旧机房的整理工作,对所搬运的设备进行资料整理,首先对每台设备建立基本情况、位置说明、系统关联性、搬迁批次及工作步骤等的设备档案,然后在档案资料收集完的基…...
uniapp开发钉钉小程序流程
下载开发工具 1、小程序开发工具 登录钉钉开发平台,根据自己的需求下载合适的版本,我这里下载的是Windows (64位)版本 小程序开发工具 - 钉钉开放平台 2、HBuilder X HBuilderX-高效极客技巧 新建项目及相关配置 新建项目 …...
河南萌新联赛2024第(一)场:河南农业大学 A D F G H I K
A 造数 题目描述: 给定一个整数 𝑛 ,你可以进行以下三种操作 操作1: 1 操作2; 2 操作3: 2 问最少需要多少次操作可以将 0 转为为 𝑛 。 解题思路 操作1,2,3。操作 3 …...
通信协议_C#实现CAN通信
CAN协议 CAN(Controller Area Network)即控制器局域网络。特点: 多主网络:网络上的任何节点都可以主动发送数据,不需要一个固定的主节点。双绞线:使用双绞线作为通信介质,支持较远的通信距离。…...
【AI工具基础】—B树(B-tree)
B树(B-tree)是一种自平衡的树状数据结构,它能够在保持数据有序的同时,优化大块数据的读写操作,使得查找、顺序访问、插入和删除等操作都能在对数时间内完成。以下是对B树原理的详细描述: 一、定义与特性 …...
STM32智能仓库管理系统教程
目录 引言环境准备智能仓库管理系统基础代码实现:实现智能仓库管理系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:仓库管理与优化问题解决方案与优化收尾与总结 1. 引言 智能仓库管理系统通…...
空间计算开发:Volu的集成开发工具包
在空间计算技术迅速发展的今天,VR和AR项目的开发需求日益增长。Volu,一个面向空间计算赛道的开发者工具,正致力于简化这一过程。本文将深入探讨Volu如何通过其集成环境,为开发者提供一站式的解决方案。 一、定位:空间计算的得力助手 Volu定位为一个专为空间开发设计的集…...
02-Redis未授权访问漏洞
免责声明 本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担&…...
Linux——多路复用之poll
目录 前言 一、poll的认识 二、poll的接口 三、poll的使用 前言 前面我们学习了多路复用的select,知道多路复用的原理与select的使用方法,但是select也有许多缺点,导致他的效率不算高。今天我们来学习poll的使用,看看poll较于…...
【AI资讯】7.19日凌晨OpenAI发布迷你AI模型GPT-4o mini
性价比最高的小模型 北京时间7月19日凌晨,美国OpenAI公司推出一款新的 AI 模型“GPT-4o mini”,即GPT-4o的更小参数量、简化版本。OpenAI表示,GPT-4o mini是目前功能最强大、性价比最高的小参数模型,性能逼近原版GPT-4࿰…...
3.设计模式--创建者模式--工厂模式
3.设计模式–创建者模式–工厂模式 3.1简单工厂和静态 工厂(不属于23中设计模式) //抽象类:定义了产品的规范,描述了产品的主要特性和功能 public interface Tea {public abstract void setName();public abstract String getNa…...
IOT 的 10 种常见协议、组网模式、特点及其使用场景浅析
前情: 开放系统互连(OSI)模型,它列出了七层。从下到上,各层如下: 物理层 数据链接 网络层 传输层 会话层 推介会 应用层 物联网也以多层模型的形式表达。尽管有些使用 OSI 七层模型,但其…...
【Android】 dp与sp,加冕为王
目录 重要概念 屏幕尺寸 屏幕分辨率 屏幕像素密度 基础知识: ppi pt DPI 的定义和重要性 Android 中的 DPI 级别 px dp(Density Independent Pixels) sp(Scale-independent Pixels) 安卓的dp/dip、sp 虚拟…...
R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-曲线图-热力图-雷达图
R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-曲线图-热力图-雷达图 散点图示例解析效果 饼图示例解析效果 折线图示例解析效果 柱状图示例解析效果 箱线图示例解析效果 直方图示例解析效果 曲线图使用 curve() 函数示例效果 使用 plot() 函数示例效果 使用 ggplot2 包绘制…...
影响转化率的多元因素分析及定制开发AI智能名片S2B2C商城系统小程序的应用案例
摘要:在互联网时代,转化率是衡量营销活动成功与否的关键指标。本文首先分析了影响转化率的多种因素,包括活动页面的设计、活动的限时性、主题文案的吸引力、从众心理的运用,以及最核心的产品质量与优惠力度。接着,本文…...
数据仓库中事实表设计的关键步骤解析
在数据仓库的设计过程中,事实表是描述业务度量的核心组件。本文将深入探讨数据仓库中事实表设计的关键步骤,包括选择业务过程及确定事实表类型、声明粒度、确定维度和确定事实的过程,帮助读者更好地理解和应用事实表设计的原则和方法。 第一…...
.net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
Program.cs 安装包:Microsoft.AspNetCore.Hosting.WindowsServices、Microsoft.Extensions.Hosting、Microsoft.Extensions.Hosting.WindowsServices、Microsoft.Extensions.Logging.Log4Net.AspNetCore 新建Configs/log4net.config using Com.Chinahorn.Exchange.W…...
通过 EMR Serverless Spark 提交 PySpark 流任务
在大数据快速发展的时代,流式处理技术对于实时数据分析至关重要。EMR Serverless Spark提供了一个强大而可扩展的平台,它不仅简化了实时数据处理流程,还免去了服务器管理的烦恼,提升了效率。本文将指导您使用EMR Serverless Spark…...
【Linux网络】epoll实现的echo服务器{nocopy类/智能指针/echo服务器}
文章目录 1.代码基础1.1某类唯一存在1.2C智能指针 2.epoll实现的echo服务器日志套接字CMakeepoll封装主函数服务器 1.代码基础 1.1某类唯一存在 这段代码定义了一个名为 nocopy 的类,它旨在防止该类的实例被复制或赋值。这是通过在类中显式删除拷贝构造函数&#…...
[数据集][目标检测]拐杖检测数据集VOC+YOLO格式2778张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2778 标注数量(xml文件个数):2778 标注数量(txt文件个数):2778 标注…...
长按加速- 解决react - setInterval下无法更新问题
最开始直接setInterval里,useState硬写,发现更新不,固定值 换let,发现dom更新不了 正确做法是用ref 并且pc端可以长按的,只是要用onTouchStart,不要用onMouseDown onTouchStart{handleMouseDown} onTou…...
路网双线合并单线——ArcGIS 解决方法
路网双线合并成单线是一个在地图制作、交通规划以及GIS分析中常见的需求。双线路网定义:具有不同流向、不同平面结构的道路。此外,车道数较多的道路(例如,双黄实线车道数大于4的道路)也可以视为双线路网,本…...
【.NET全栈】ASP.NET开发Web应用——ADO.NET数据访问技术
文章目录 前言一、ADO.NET基础1、ADO.NET架构2、ADO.NET数据提供者 二、连接数据库1、SqlConnection数据库连接类2、使用SqlConnectionStringBuilder连接字符串3、关闭和释放连接4、在web.config配置文件中保存连接字符串5、连接池技术 三、与数据库交互1、使用SqlCommand操作数…...
【机器学习】无监督学习和自监督学习
1. 什么是机器学习 机器学习是一种使计算机系统能够从数据中学习并做出预测或决策的技术和科学领域。它不需要显式地编程来执行特定任务,而是通过使用算法来分析数据和识别模式,以此“学习”如何做出准确的预测或决策。 以下是机器学习的几个关键点&…...
蓝牙新篇章:WebKit的Web Bluetooth API深度解析
蓝牙新篇章:WebKit的Web Bluetooth API深度解析 在物联网(IoT)时代,Web应用与物理设备的交互变得越来越重要。WebKit的Web Bluetooth API开启了一个新时代,允许Web页面直接与蓝牙设备通信。这一API不仅提高了用户体验,还为创新的…...
2024可信数据库发展大会:TDengine CEO 陶建辉谈“做难而正确的事情”
在当前数字经济快速发展的背景下,可信数据库技术日益成为各行业信息化建设的关键支撑点。金融、电信、能源和政务等领域对数据处理和管理的需求不断增加,推动了数据库技术的创新与进步。与此同时,人工智能与数据库的深度融合、搜索与分析型数…...
做一个产品网站要多少钱/seo搜索排名优化公司
文章目录一、今日成绩二、错题总结第一题三、知识查缺题目及解析来源:2023年04月12日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 依据题目画出PERT图如下: 关键路径长度(从起点到终点的路径中最长的一条&#x…...
新手做网站视频教程/seo是指搜索引擎营销
传说之下虚拟手柄帮助你刚好的体验游戏,这是一款功能非常强大手柄模拟器,让你体验最真实的游戏感受,虚拟的手柄让你在游戏中尽情的改变键位操作,在传说之下这款游戏中玩的更加的进行,有着更加流畅的游戏体验。专为安卓…...
wordpress是哪家公司的建站程序/成都网站制作费用
一、背景知识Oralce中的一张表数据量达到亿数量级后或是单表达到2G大小,查询效率似乎会明显下降。需要通过分区的方式,从行的维度对表进行划分,避免单表数据量过大分区方法有下面几类:范围,最常见,按照某列…...
卖网站怎样做/传播易广告投放平台
这也许是一个让粉丝略伤感的新闻,《Halo2》PC多人游戏服务器将在下个月永久关闭。343 Industries注意到服务器的峰值在线人数一直仅有20人,因此做出了关闭服务器的决定。查看原图343 Industries在Halo Waypoint中说道:“我们很遗憾地宣布&…...
青海网站建设价格低/seo工资水平
背景 一些软件系统需要根据组织做数据查看权限限制,比如可以设置张三能查看或管理1个或多个组织的数据。在对张三进行配置后,张三这个账号查询对应的业务数据表时需要带上数据权限有关的where条件。 一、主要表介绍 组织表的主要字段:ID、CODE、NAME、上级CODE、CODE全路…...
如何做网站赌博的教程/怎么做seo
android:stretchMode"columnWidth" <!--如何填满空余的位置,模拟器采用WVGA800*480,每排4列,有4*100+5*3=415,还余65px的空间,如果是columnWidth࿰…...