int n[2] 定义了数组,这个数组有2个元素,每个元素是一个 int 类型的变量
通过 sizeof 计算数组的大小的方法 : int len = sizeof(a)/sizeof(*a);
二维数组本质上就是一维数组,C 语言里面的数组就只有一维数组,那么二维数组就是一个数组的数组,从数学角度来看,二维数组相当于一个矩阵
这个是一个找最值的应用,将小于号,改成大于号就是找最大值了
#include <stdio.h>
#define LN 50
#define SN 10
int main()
{
int light[LN] ={0};
int student[SN] = {0};
int i = 0;
int j = 0;
for(i=0; i< LN;i++) linght[i]; // 1表示灯开,0表示灯关
for(i=0; i< SN;i++) student[i] = (i + 1) * 2; //2, 4 ,6 ,8,...
for(i=0;i<SN;i++)
for(j=0;j<LN;j++)
if(j + 1) % student[i] ==0;
{
light[j] = !light[j];
}
for(i=0;i< LN;i++)
if(light[i])
printf("%d",i + 1);
}
字符串字面量肯定是字符串常量
字符串长度就是这个字符串中包含的字符个数,字符串大小就是这个字符串占用的内存空间是多少
只需要保证 S 所对应的字符数组大小超过5,在d的后面还有还有一个元素,所以是5
字符串的赋值用 ctrcpy
既然是字符串的连接,就要保证连接的都是字符串,而这里的 r 仅仅是一个字符数组
int main()
{
char r[10]; //定义字符数组 // char r[10]= " "; < == > char r[10] = {0}; 这个时候的 r 就变成了空字符串
int i = 0;
int e =0;
for()
{
e = "abcd"[i]; //将字符串常量当成数组来使用
//"abcd"是一个字符串常量,其本质是字符数组
// 通过方括号加上下标的形式,来访问这个数组里面的元素
//将数组里面第 i 号元素赋值给 e
printf("%d ", e); //这个for循环结束后会在屏幕打印5 个整数出来,其中最后一个整数是 0 就是字符串的结尾,就是 0 元素
}
printf("\n");
strcat(r,"abcd"); //为了使这个正确,就要将 r[0] = 0; ==> r 变成了字符串 ,这个字符串里面一个字符都没有,因此就是一个空字符串
strcat(r,"abcd");
printf("r = %s\n", r);
return 0;
}
这里的 r 最多能表示长度为 9 的字符串,因为最后的结束 0 元素也需要占空间的
A : 因为在C 语言里面 但凡给定了数组大小,就不用理会初始化列标里面有多少值了,编译器会输出前面6 个字符,最后一个 0 元素就被忽略了
B : 这里的第 5 号元素,充当 0 元素
结论: 对一个数组来说,初始化列标里面多余的值会被忽略掉
为什么不是 6 ,这个字符串里面出现的都是转义字符
在 C语言里面 \ 表示转义,会将后面出现的字符转义
在C 语言里面字符串的结束符,就是第一次出现的0 元素
s 是一个字符数组同时也是一个字符串
#include <stdio.h>
#include <sizeof.h>
int main()
{
char s[] = "abc\0de\0fg";
int size = sizeof(s);
int i = 0;
int j = 0;
while(i < size)
{
if( s[i] == 0)
{
for(j = i + 1;j < size; j++)
{
s[j-1] = s[j];
}
size--;
}
else
{
i++;
}
}
printf("s = %s\n",s);
}