字符数组

#include "stdafx.h"
#include "iostream"

int _tmain(int argc, _TCHAR* argv[])
{
    char a[3][5]={};
    for(int i=0;i<=2;i++)
    {
        gets(a[i]);
    }
    for(int i=0;i<=2;i++)
    {
        puts(a[i]);
    }
    
    system("pause");
    return 0;
}

1.以上是二维数组的输入与输出//  输入时要注意分行输入

2.对于一维字符数组,有以下几种方法:char a[12];

(1)scanf("%s",str);//识别空格作为字符串的结尾;即若输入hag jhg 则只输出hag;

(2)getchar 逐个对元素赋值;//可以识别  '\n' ,

(3)gets(a);//遇换行符结束,即一按回车就结束,自动在字符串末尾加上  '\0'

(4)char *b;   b=a;  scanf("%s",a);  // 借助字符指针变量实现对数组的赋值;

(5)借助字符串函数strcpy strcpy(a,"iosjhaksjyd");要为'\0’预留空位 否则中断 因为“iosjhaksjyd”是由系统分配内存的 对于字符串常量系统自动在其后加‘\0’

输出均可用printf("%s",a);

其次有for循环可输出

for(int i=0;i<=11;i++)

{

printf("%c",a[i]);

}

 3.字符串的结束 ‘\0’(在c语言中,是将字符串作为字符数组来处理的)

对字符数组初始化时,若是依次赋值

如果提供的初值个数与预定的数组长度相同,此时没有‘\0’

如果提供的初值个数小于预定的数组长度,那么系统自动添上‘\0’

如果数组没有定义长度,则‘\0’需自己添加

(字符数组并不要求它的最后一个字符为‘\0’,甚至可以不包含‘\0’)

4.使用字符指针变量和字符数组的比较

(1)字符数组存放的是字符 字符指针变量存放的是地址(字符串的首地址)

(2)可以对字符指针变量赋值 但不能对数组名赋值

char *a;

a="i love china";//char str[14]; str="i love china";(错误 数组名是地址,是常量,不能被赋值,非法)

(4)编译时系统为字符数组分配若干个存储单元,存放各元素的值,而对字符指针变量,只分配4个字节存放指针变量(VC++)

char *a;

scanf("%s",a);(错误 未指明指针指向,可能破坏程序或有用数据,甚至是破坏了系统)

char *a,str[10];

a=str;

scanf("%s",a);(正确 指针有了明确的指向)

(5)指针变量的值是可以改变的 而字符数组名代表一个固定的值(数组首元素的地址),不能改变

posted @ 2018-12-07 18:24  kinghyt  阅读(721)  评论(0编辑  收藏  举报