C编程基础day06

1、数组在 内存中是连续存储的。
2、定义数组元素个数最好是常量, 变量很多编译器编译不通过。
3、使用数组最好别越界,最可怕是某些编译器不报错,执行时候程序崩了。有些时候即便增加很多打印告警也无法发现,因为可能出错地方之后的打印还会正常打印。
4、不初始化的数组元素值为随机数。 {}范围内的变量或数组即局部变量不初始化时,其值为随机数
5、数组名是常量,不能修改
6、数组名是数组首元素地址
7、sizeof(数组名)测得是整个数组的大小。
8、在{}不能有其他变量的名字和数组的名字相同
9、初始化的时候必须写在{内部}

/*使用c99标准编译程序*/
gcc Hello.c -o Hello -std=c99

二维数组:实质上内存中没有多维数组,实质上还是一维的,多维数组是特殊的一维数组。
int a[3][4]: 可以理解为定义了一个一维数组a[3], ,这个一维数组有3个元素,每个元素是int [4]类型的。 a[0]、a[1]、a[2]就是第0、第1、第2个元素。

二维数组初始化:
二维数组 定义时同时初始化,第一维的大小可以不写,如a[][4]={1,2,3,4,5,6,7,8};
二维数组第一维的[]不写时候,必须初始化, int a[][4];/*这时会出错*/
int a[5][10]={0};时候全部元素为0; sizeof(a[0])测得是第一行10个元素的大小为40字节。 a代表首元素地址,&a[0]也代表首元素地址。

C语言中没有字符串,C语言是用字符数组来模拟字符串。
字符串一定是字符数组,但字符数组不一定是字符串。如果字符数组是以‘\0’(‘\0’等价于数字0)结尾的话,那么这个字符数组就是字符串。
    char b[]={'a','b','c','d'}; /*字符数组,这个不要写b[10],因为写成b[10]话后边就自动填0了,就成字符串了*/
    char c[10]={'a','b','c','d','\0'};/*字符串*/
    char d[10]={'a','b','c','d',0};/*字符串*/

  char a[]={'x','y','z'};
  printf("b =%s \n",a); /*打印会是xyz乱码,因为%s打印时候会一个字符一个字符一直打印下去直到遇到结束符'\0',例子a[]=中没有‘\0‘所以为打出来乱码*/

最常用的字符数组初始化, 会在字符结尾自动加结束数字0,这是隐藏的用户看不到,但是占用内存,使用sizeof(b)可以看出来。 字符\0后边就不要跟数字了,因为有可能刚好组成一个8进制转义字符,如“\012abc”中的'\012'等价于‘\n’
char a[10]="abcdefg"; /*这种方式赋值最多写9个字符,因为要留一个放结束符\0*/
charb[]="abcdefg";

字符串数组的输入输出
char a[100];
scanf("%s",a);  /* 输入以空格截断, 输入hello  word时候只会存入hello.*/
printf("a=%s\n",a);

随机数的产生: 先设置种子,才能产生随机数。
设置种子函数 void srand(unsigned int seed);  /*如果设置的种子一样的话,每次产生的随机数都一样,下载电影种子一样,所以电影一样*/
产生随机数的函数rand();

    srand((unsigned int )time(NULL));/*先设置一次取随机数种子*/ /*time(NULL)获取系统时间,因为系统时间是变化的,所以每次设置的种子都不一样*/
    for(i=0; i<10; i++)
    {        
        num=rand();
        printf("num=%d\n",num);
    }
    

char ch=0 ;和char ch=‘\0’等价, 但和char ch=‘0’是两回事





猜你喜欢

转载自blog.csdn.net/Shayne_Lee/article/details/81026806