0.数组名是一个指针,存放数组首元素地址,所以使用scanf()接受字符串输入时只用写上数组名,不用加&。数组名是常量不允许修改其值。数组只能定义的时候初始化,后期初始化会被认为是修改数组名的值。
1.二维数组中 ->
求行数: int row = sizeof(a)/sizeof(a[0]);
求列数: int col = sizeof(a[0])/sizeof(a[0][0]);
求总体元素个数:
int num = (sizeof(a)/sizeof(a[0])) * (sizeof(a[0])/sizeof(a[0][0])) -> sizeof(a)/sizeof(a[0][0]);
2.C语言中没有字符串(string)这个类型的变量,所以都是用字符数组模拟字符串。字符串一定是字符数组,但字符数组不一定是字符串。每个字符串结尾都有结束符('\0')
eg:
char a[] = {'a','b','c'};//字符数组 char b[] = {'a','b',c','\0'};//字符串
3.printf()函数中,使用%s打印字符串时,会顺着首元素地址一个个往后打印,直到遇到结束符('\0'或'0'),如果没有结束符就会打印到其他内存上,会出现乱码现象。
4.结束符可以写为:0或'\0',但是,'0'的ascii码为48,是数字0。
5.scanf()接受字符串输入时不用加&。scanf()接受输入时遵循空格阶段原则,遇到空格就只保留空格前的内容。scanf()接收到输入内容后会在输入内容后面加一个'\0',所以不论字符串原来的内容是什么,在接受输入后在打印就会只打印输入内容。
eg:
char buf[25] = {"aaaaaaaaaaaaaa"};
scanf("%s",buf);//scanf接受输入不用加&
//假设现在输入hello,然后buf[]就会变成 ->
buf[25] = {"hello\0aaaaaaaa"};
//这个时候再打印buf[]就只会打印出'\0'前的内容