c语言易错题目及其解析
1.在C语言中,++i 与 i++ 的区别是什么?
答:++i是先进行自增操作,再进行表达式运算;i++是先进行表达式运算,再进行自增操作。
2. 下面这段代码会输出什么?
int i = 10;
while (i-->0)
{printf函数是如何实现的
printf('%d ',i);
}
答:输出9 8 7 6 5 4 3 2 1 0。该代码利用了C语言中的后缀递减运算符--。
3. 在C语言中,如何实现字符串反转?
答:可以通过循环遍历字符串,将字符串的首尾字符进行交换,直到遍历到字符串的中间位置。
4. 下面这段代码会输出什么?
char *str = 'hello';
printf('%d',sizeof(str));
答:输出指针变量str所占的内存字节数,通常是4或8(根据编译器的位数而定),因为指针变量本身只是一个指向地址的变量。
5. 在C语言中,如何实现动态内存分配?
答:可以使用标准库函数malloc()来分配内存,并使用函数free()来释放内存。
6. 下面这段代码会输出什么?
int a[5] = {1,2,3,4,5};
int *p = (int*)(&a+1);
printf('%d,%d',*(a+1),*(p-1));
答:输出2,5。该代码利用了指针的运算规则,因为&a是指向整个数组a的指针,所以&a+1会指向a数组之后的一个未知内存地址,然后将其强制转换为int*类型的指针p,由于a数组是连续存储的,所以p-1指向的是a[4]的地址,*(p-1)就是a[4]的值。而*(a+1)就是a[1]的值。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论