linux数组定义?linux正则表达式
大家好,今天来为大家分享linux数组定义的一些知识点,和linux正则表达式的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
能不能用 define 定义常量数组
不可以,下面是define的一些用法,希望对你有帮助。
1.简单的define定义
#define MAXTIME 1000
一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写
if(i<MAXTIME){.........}
编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。
这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。
2.define的“函数定义”
define可以像函数那样接受一些参数,如下
#define max(x,y)(x)>(y)?(x):(y);
这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。
但是这样做的话存在隐患,例子如下:
#define Add(a,b) a+b;
在一般使用的时候是没有问题的,但是如果遇到如:c* Add(a,b)* d的时候就会出现问题,代数式的本意是a+b然后去和c,d相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了
c*a+ b*d
另外举一个例子:
#define pin(int*);
pin a,b;
本意是a和b都是int型指针,但是实际上变成int* a,b;
a是int型指针,而b是int型变量。
这是应该使用typedef来代替define,这样a和b就都是int型指针了。
所以我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。
3.宏的单行定义
#define A(x) T_##x
#define B(x)#@x
#define C(x)#x
我们假设:x=1,则有:
A(1)------〉T_1
B(1)------〉'1'
C(1)------〉"1"
(这里参考了 hustli的文章)
3.define的多行定义
define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)
#define MACRO(arg1, arg2) do{\
/* declarations*/\
stmt1;\
stmt2;\
/*...*/\
} while(0)/*(no trailing;)*/
关键是要在每一个换行的时候加上一个"\"
摘抄自修补了几个bug
4.在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译。
就是:
#ifdef WINDOWS
......
......
#endif
#ifdef LINUX
......
......
#endif
可以在编译的时候通过#define设置编译环境
5.如何定义宏、取消宏
//定义宏
#define [MacroName] [MacroValue]
//取消宏
#undef [MacroName]
普通宏
#define PI(3.1415926)
带参数的宏
#define max(a,b)((a)>(b)?(a),(b))
关键是十分容易产生错误,包括机器和人理解上的差异等等。
6.条件编译
#ifdef XXX…(#else)…#endif
例如#ifdef DV22_AUX_INPUT
#define AUX_MODE 3
#else
#define AUY_MODE 3
#endif
#ifndef XXX…(#else)…#endif
7.头文件(.h)可以被头文件或C文件包含;
重复包含(重复定义)
由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的。
通过条件编译开关来避免重复包含(重复定义)
例如
#ifndef __headerfileXXX__
#define __headerfileXXX__
…
文件内容
…
#endif
linux如何给数组赋值linux数组赋值
新手求教,怎么给数组赋值?
给数组赋初值的方法:
1、直接初始化:intarr={1,2,3};
2、遍历访问初始化:for(i=0;i3;i++)arr=i;
3、内存操作函数:memset(arr,3,abs);//abs为另一个已知的数组。
4、字符串赋值函数,仅限于char型数组:strcpy(arr,abs);abs为一字符串或者char型数组。
给数组赋值eof怎么用?
eof
是个宏,其意思是:end
of
file,文件尾标志。
从数值上来看,就是整数-1
在c语言的头文件中对其进行了宏定义:
libio.h:#defineeof(-1)当读文件操作时,遇到文件结束位置或读数据出错均会返回
eof。
(c语言中所有的输入输出操作均是按读文件的思想来设计的,或者说,是文件操作的一种特例,如getchar()就是fgetc(stdin)
的一个宏
)
intgetchar();//从标准输入缓冲区读取一个字符,成功返回该字符的ascii值,出错,返回eof那么,如何在键盘输入时,产生eof呢?
不同的系统方法不同:
linux系统下,在输入回车换行后的空行位置,按
ctrl+d
(先按ctrl键,不放,再按d键)
windows系统下,在输入回车换行后的空行位置,按
ctrl+z,再回车确认
以下代码供参考:
#include
voidmain()
{
intch;
do{
ch=getchar();
printf(ch=%dn,ch);//输出读返回的ch值,读到eof会输出-1
}while(ch!=eof);
}
如何给数组赋值?
给数组赋初值的方法:
1、直接初始化:intarr={1,2,3};
2、遍历访问初始化:for(i=0;i3;i++)arr=i;
3、内存操作函数:memset(arr,3,abs);//abs为另一个已知的数组。
4、字符串赋值函数,仅限于char型数组:strcpy(arr,abs);abs为一字符串或者char型数组。
ntt呵呵,也许这样理解会比较容易:
“是要给t0,t1,t2,t3,t4....t100赋值”如果想每一个都赋值,这样即可:
intt
for(inta=0;a100;a++)
{
cin>>t;
}
给数组赋值的方法?
在大多数编程语言中,给数组赋值的方法通常是通过遍历数组的每个元素,并将其赋值为指定的值。希望我的能帮助到你。
数组怎么自动赋值?
可以使用for循环,如:
for(inti=0;i++;)
a=i;
Linux Shell脚本系列教程:数组和关联数组
这篇文章主要介绍了Linux Shell脚本系列教程(六):数组和关联数组,本文讲解了什么是数组和关联数组、定义打印普通数组、定义打印关联数组等内容,需要的朋友可以参考下
一、数组和关联数组
数组是Shell脚本非常重要的组成部分,它借助索引将多个独立的独立的数据存储为一个集合。普通数组只能使用整数作为数组索引,关联数组不仅可以使用整数作为索引,也可以使用字符串作为索引。通常情况下,使用字符串做索引更容易被人们理解。Bash从4.0之后开始引入关联数组。
二、定义打印普通数组
数组的方法有如下几种:
代码如下:
#在一行上列出所有元素
array_var=(1 2 3 4 5 6)
#以“索引-值”的形式一一列出
array_var[0]="test1"
array_var[1]="test2"
array_var[2]="test3"
注意:第一种方法要使用圆括号,否则后面会报错。
数组元素的方法有如下几种:
代码如下:
echo${array_var[0]}#输出结果为 test1
index=2
echo${array_var[$index]}#输出结果为 test3
echo${array_var[*]}#输出所有数组元素
echo${array_var[@]}#输出所有数组元素
echo${#array_var[*]}#输出值为 3
注意:在ubuntu 14.04中,shell脚本要以#!/bin/bash开头,且执行脚本的方式为 bash test.sh。
三、定义打印关联数组
定义关联数组
在关联数组中,可以使用任何文本作为数组索引。定义关联数组时,首先需要使用声明语句将一个变量声明为关联数组,然后才可以在数组中添加元素,过程如下:
代码如下:
declare-A ass_array#声明一个关联数组
ass_array=(["index1"]=index1 ["index2"]=index2)#内嵌“索引-值”列表法
ass_array["index3"]=index3
ass_array["index4"]=index4
echo${ass_array["index1"]}#输出为index1
echo${ass_array["index4"]}
echo${!ass_array[*]}#输出索引列表
echo${!ass_array[@]}#输出索引列表
注意:对于普通数组,使用上面的方法依然可以列出索引列表,在声明关联数组以及添加数组元素时,都不能在前面添加美元符$