代码拉取完成,页面将自动刷新
同步操作将从 狐皮先生/c语言文档 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
int arrayTmp[10] = {0};
int nTmp = &arrayTmp[4]-&arrayTmp[0];
问 nTmp = ?
当时想也没想写了nTmp = 16;
回家在机器上调试运行了一下,结果nTmp=4。
原来,执行完数组地址相减运算后,还会执行算数右移指令,右移位数视参数类型而定,如:int型右移2位,short型右移1位。 都知道右移1位相当于除以2操作,右移2位等同于除以4。
由此可见,两个数组元素地址相减,实际是获取两个元素数组元素的距离,而不是地址的距离。
int main()
{
char a[14];
//这是错误的初始化方式 因为字符串是个常量不可被修改
a = "Hello, world!";
//应该char a[14]="Hello, world!";-->这属于指向一个一个的字符,
//a的左值不可修改
return 0;
}
3. i++和i--在表达式中会永久改变值
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4.字符函数和字符串函数
4.1 strlen
size_t strlen(const char * str);
因为strlen不可能返回负数,所以返回类型为size_t无符号整型;
以‘\0’为结束标志,统计‘\0'前的字符个数;
size_t a=10;
size_t b=20;
a-b=不是-10 因为无符号整型减去也是一个无符号整型
4.2 strcpy;
char* strcpy(char*strdes,char*strcsource);
将一个字符串拷贝到另一个字符串中 str1[]="hello"; str2[]=''world'' strcpy(str1,str2)--->str1-->"world";
注意str1的空间大小必须大于等于str2的字符串大小 否则拷贝会撑爆str1 造成非法访问;
拷贝函数要必须有'\0'
4.3 strcat
char*strcat(char*str1des,counst char*str);
将一个字符串追加到另一个字符串中 str1[]="hello"; str2[]=''world'' strcpy(str1,str2)--->str1-->"hello world";
注意str1剩余空间大小必须大于等于str2的字符串大小 否则拷贝会撑爆str1 造成非法访问;
目标字符串中要必须有'\0'
4.4strcmp
int strcmp(const char*str1,const char*str2);
比较的是对应字符串的字符的大小; char a[]="abcde";char b[]="abq" strcmp(a,b)-->-1;
strcmp(a,b);比较对应字符的ascii码
a>b 返回1 a<b 返回-1 a=b 返回 0;
4.5长度不受限制的字符串函数 strcpy strcat strcmp;
4.4长度限制的函数strncpy strncat strncmp
str[20]=''0000''
strncpy(str,"hee",3)--->printf(str)-->hee0
strncat(str,''hehe'',3)-->printf(str)-->000heh
strncmp(str,str0,3) -->printf(strncmp())--> 结果>0 (“3”比较3对数据)
4.5 strstr
char* strstr(const char*str1,const char*str0)
寻找str0是否是str1的子字符串 找到了返回找到的首地址 找不到返回NULL;
char arr[]="20020202.zjy'';--->20020202+zjy
str(char * str,const char * str);
strtok (str,p)
分割-------------------------------------------------------------------------------------------------------------------------------------------------------------
8.循环语句
8.1 break 打断循环
跳出所在的循环,不会跳出所有循环;
8.2 continue
提前结束本次循环,加入下一次循环的判断入口
8.3 for循环 for(表达式1;表达式2;表达式3){}
表达式1-->初始化; 表达式2-->判断条件; 表达式3-->调整需要判断数据;
9. int getchar(void){} //获得键盘输入一个字符,进入缓存区,从缓冲区获得一个值返回到一个int类型(ascii码)
10.int putchar(int char){} //输入一个字符(以ascii码) 返回写入的字符ascii吗
11.一般情况是scanf();不获取\和空格 认为\n和空格属于与其他数据的分割;
解决方法 scanf("[^\n]",&b);
12.printf --按照指定的格式,输入数据;
scanf --按照指定的格式,输出数据;
13.for 循环
ps for循环把初始化,判断,调整 3个表达式 放在一起在括号内
ps for循环 初始化 判断 调整在括号内可以不写 但是 判断的表达式不写会造成死循环,
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。