进击的小白——国二笔记
-
字符串以’\0’结束
答案为3,字符串s实际只有“0123xy”,‘\0’后面的直接忽略。 -
sizeof
sizeof(数组名)结果为数组所有元素所占内存之和。
sizeof(*q)等价于sizeof(p[0]),是用指针表示数组。
补充:sizeof(q)可能等于4也可能等于8,因为指针变量在32位计算机中占用4字节,在64位计算机中占用8字节。 -
指针函数
答案选D,其中ABC三种表示方式都可以成功调用函数add。
函数指针在定义的时候以下两种方式都是正确且等价的:
int add(int a, int b) { ...... }
int main(vod)
{
int (*p)(int, int) = add;
}
int add() { ...... }
int main(vod)
{
int (*p)(int, int);
p = add;
}
且p(a, b)
、(*p)(a, b)
、add(a, b)
这三种形式都可以成功调用函数add。
问题(未解决),下面一段程序,为什么在13行的地方报错,13行和12行表示的含义一样,只不过函数名用函数指针来表示了:
int *add(int a, int b)
{
int c = a + b;
int *p = &c;
return p;
}
void main(void)
{
int a = 1, b = 4;
int (*p)(int, int) = add;
int c = *(add(a, b));
int d = *((*p)(a, b));
printf("c=%d, d=%d", c, d);
}
- 数组指针及数组初始化
选A,数组在定义后不能进行整体初始化,因此A错,C中ss[6]是一个数组指针,即数组中包含6个char *型的指针,让数组的第二个指针元素指向字符串的首地址是可行的。
char *p;
p = "aaa";
printf("%s", p);
以上代码运行结果:
- 赋值语句作为判断条件
#include <stdio.h>
void main(void)
{
int a = 1, b = 0;
if (a = b)
{
printf("%d", 1);
}
else
{
printf("%d", 0);
}
}
这段程序输出的最终结果0,因为if (a = b)
中,首先先对a进行赋值,让a等于b,然后判断a的值是否为0,进而继续执行if语句。
.