进击的小白——国二笔记

  1. 字符串以’\0’结束
    进击的小白——国二笔记
    答案为3,字符串s实际只有“0123xy”,‘\0’后面的直接忽略。

  2. sizeof
    进击的小白——国二笔记
    sizeof(数组名)结果为数组所有元素所占内存之和。
    sizeof(*q)等价于sizeof(p[0]),是用指针表示数组。
    补充:sizeof(q)可能等于4也可能等于8,因为指针变量在32位计算机中占用4字节,在64位计算机中占用8字节。

  3. 指针函数
    进击的小白——国二笔记
    进击的小白——国二笔记
    答案选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);	
}
  1. 数组指针及数组初始化
    进击的小白——国二笔记
    选A,数组在定义后不能进行整体初始化,因此A错,C中ss[6]是一个数组指针,即数组中包含6个char *型的指针,让数组的第二个指针元素指向字符串的首地址是可行的。
char *p;
p = "aaa";
printf("%s", p);

以上代码运行结果:
进击的小白——国二笔记

  1. 赋值语句作为判断条件
#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语句。
.