栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

易错知识点

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

易错知识点

一、易错知识点 1.sizeof(数组名)与sizeof(*数组名)

数组名通常表示的都是数组首元素的地址
但是有2个例外:

  1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节
  2. &数组名,这里的数组名表示的依然是整个数组,所以&数组名取出的是整个数组的地址
    例子如下:
int main()
{
	int arr[10] = { 0 };
	printf("%pn", arr);
	printf("%pn", arr+1);

	printf("%pn", &arr[0]);
	printf("%pn", &arr[0]+1);

	printf("%pn", &arr);
	printf("%pn", &arr+1);

	int sz = sizeof(arr);
	printf("%dn", sz);

	return 0;
}

结果显示:

最后一个地址是多了16进制中的0x28,十进制表示是40,也就是一个数组的大小。

2.sizeof(str), strlen(str)
#include 	
int main()
{
    char str[] = "hello bit";
    printf("%d %dn", sizeof(str), strlen(str));
	return 0;
}

str字符数组使用"hello bit"初始化,最终也会将’’放置到数组中,因此数组中总共有10个元素
sizeof(str):获取数组的总大小,10个元素,每个元素占1个字节,因此总共是10个字节
strlen(str): 获取字符串中有效字符的个数,不算’’,因此总共9个有效字符
故上述printf会分别打印:10 9

char acX[] = “abcdefg”;
char acY[] = {‘a’,’b’,’c’,’d’,’e’,’f’,’g’};

acX和acY都是字符数组,但是初始化表达式不同,acX和acY的区别如下:
acX:数组中总共有8个元素,分别是:‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘’
acY:数组中总共有7个元素,分别是:‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’

#include 
int i;
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">n");
    }
    else
    {
        printf(" 

C语言中,0为假,非0即为真。
全局变量,没有给初始值时,编译其会默认将其初始化为0。
i的初始值为0,i–结果-1,i为整形,sizeof(i)求i类型大小是4,按照此分析来看,结果应该是"<“,但是sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8,故实际应该选择”>".

4.print与printf 5.!=EOF

EOF在scanf连用时代表-1的意思,当用到while(scanf()!=EOF),代表的意思是一直输入,直到scanf返回的值是-1时才会停止输入,也可以在while里面加上一些约束条件,使输入在特定的条件下就会停止,也可以在输入完成后按下 ,Ctrl+z,可以强行停止输入。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947545.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号