[C学习]数组

来源:互联网 发布:app作图软件 编辑:程序博客网 时间:2024/04/30 17:46

PS:终于从基本类型进化到构造类型了.

1>类型说明符 数组名[常量];

//就是比别人多个[],常量:C不允许对数组大小作动态定义.

同时,C语言不对数组进行越界检查,

如:

char str[8];

str[0]=str[7];//对

str[0]=str[8];//越界了.在这个地址里是一个随意的数据.

2>数组初始化.定义时初始化和循环赋值.

3>数组的存储:同一个数组中的元素存放在一段连续的内存空间.

&a[i]=&a[0]+i*sizeof(类型)

--------------------------------------

二维数组

1>顺序存储,按行存放,即先在内存中先顺序存放第一行的元素,再存放第二行的元素.

---------------------------------------

字符数组

C中没有处理字符串的类型,字符串存在数组中,每个字符串都有一个结束标记.\0

数组名是首地址,不能用赋值运算给字符串变量赋值.用strcpy(c1,c2);

注意:平时没有看到的.printf("%s",c); 要用c数组名,而不能用c[2];其实这个用%c就不会了.%s是整个作为一个字符串输出的.

------------------------------------------------

字符串处理函数

1>puts(字符数组)

puts每输出一个自动换行,输出时即把'/0'换成'/n',这是与printf的区别.

2>gets(字符数组)

从终端输入一个字符串到字符数组,并得到一个函数值.(?什么函数值?)

将'/n'换成'/0',与puts相对.注:可接收空格,以换行作为结束.

3>strcat(字符数组1,字符数组2)

连接两个字符串,前提是字符数组1足够大.这个可以用strcpy来实现.

过程:将第一个字符数组的结束标识'/0'去掉,即将字符串2的首地址放在第1个字符数组的'/0'中.

代码:

strcat(char *s1,char  *s2)

{

    s1+=strlen(s1);

   while(*s1++=*s2++)//经典之处就是这里了,半点不浪费..

        ;

}

注意:当字符串S1和S3重叠时,这个函数有副作用.

如:"Chinesepeople

strcat(s1,s1+5);//将这一部分地址再放在这个地址时出现错误.

4>strcpy(字符数组1,字符串2)

注意:字符数组1必须写成是数组的形式.复制时连同'/0'一起复制到数组1中.还可以指定若干字符.

如:strcpy(str1,str2,2);

5>strcmp(字符串1,字符串2)

注:带返回值:0;正整数;负整数.以第一个不相同的比较结果为准.

6>strlen(字符数组)

它求出的位置上的差(对于连续地址)

测试字符串长度的函数,函数的值是字符串的实际长度,不包括'/0'在内.而sizeof()是一个运算符.

strlen(char *s)

{

 char *p;//定义另一个指针来挪动位置;

for(p=s;*p;p++){}//只要P不指向结束标识,就自增

return(p-s);//P到结束标识时,P与S间的距离,就是长度

}

--------------------------

补充一下类似的函数.

delete(str,start,number) 在字符串S中从start位置开始删除number个字符.

delete(char s[],int i,int n)

{

if(i>=0&&n>0&&n+i<=strlen(s)) 

{   s[i]='/0';

      strcat(s,s+n+i);

     return(1);

}

else return(0);

}