数组初始化

来源:互联网 发布:java校验身份证号 编辑:程序博客网 时间:2024/06/06 01:17

                          数组初始化

     

#include<stdio.h>

#include<string.h>

int main (int argc,char **argv)

{

int str[]    = {1,2,3,4};

int str1[5]  = {1,2,3,4};

    char str2[5] = "hell";

char str3[5] = {'h','e','l','l'};

char str4[]  = "hell";

/*     int 类型                                                */

printf("%d\n",*(str + 4));    //发生数组越界,现在的值即为垃圾数据

printf("%d\n",*(str1 + 4));   //编译器会优化,将第5个位置0

printf("%d\n",sizeof(str));   //大小为4*4

printf("%d\n",sizeof(str1));   // 大小为4*5

    /*     char类型                      */

printf("%d\n",*(str2 + 4));     //这种定义时手工申请的大小,当数据没有

printf("%d\n",*(str3 + 4 ));//填满时,编译器会自动填字符'\0' = ascll码)0

printf("%c\n",*(str4 + 5));    //同样数组越界,指向垃圾数据

     //printf(“%d”,*(str4+4));   //就会是个 ,因为编译器会优化最后给个’\0’

    printf("%d\n",strlen(str2));   //strlen 是统计字符个数的,不计'\0'的个数

printf("%d\n",strlen(str3));    //同上

printf("%d\n",strlen(str4));     //按理是求不出长度的,因为遇'\0'则止,然而

                                 //后面并不是'\0'

return 0;

}

 

注:1.  数组是遇’\0’则止。

2.  看初始化的[]里边有无大小

3.  ‘\0’ = 0 然而不等于字符’0’  因为’\0’是转义字符,ascll码是十进制0

     而’0’是普通字符  ,ascll码是48

4.  Strlen函数 是求字符的,不计算’\0’的大小,sizeof关键字求大小,要注意是否’\0’






1 0
原创粉丝点击