1.选C

1. scanf函数不能输入空格,如果输入空格,会被系统当做输入字符串之间的分隔符,认为当前字符串已经结束。而gets(str)函数可以读取含有空格的字符串,并以回车键作为结束的标志。
2. gets和scanf函数,在字符串接受结束后悔自动加'\0'。
3. getch()函数一次只能读取一个字符。
4. D选项,gets函数用错了。
2. 选A

1. 数组名是第一个数组的地址,a[0],注意这里a不是第一行第一个元素的地址,而是第一个一维数组的地址,a[0][0]才是表示的第一个一维数组的第一个地址。
2. 地址+1表示向下移一层。
3. 选项分析:
A选项,*(a+1)表示的是第二个一维数组的第一个元素也就是a[1][0],*(*(a+1)+2)表示的就是a[1][0]再往后挪两个,就是a[1][2]。
B选项,*(a+3)就是把a的地址向下移三个,即a[3][0]。
补充知识点:

C选项,&a[0]得到第一个一维数组的首地址,再加1表示的是a[0][1],再加2,表示a[0][3](正确性未知)
D选项,a[0]是第一个一维数组的首地址,*(a[0]+1)表示的是a[0][1]
3. 选C

1. strcpy()函数:是将一个字符串复制到另一块空间地址中的函数,‘\0’是停止拷贝的终止条件,同时也会将 '\0' 也复制到目标空间。
2. a[0][2]复制了字符' ',所以执行完a[2][3]={{'a','b',' '},{'c','d','\0'}}在输出字符串的时候以'\0'为止结束字符串,所以输出的是字符串"ab cd"。
4. 选C

1. 首先,数组是从A[1][1]开始的,所以和所谓的数组从零开始没什么关系。
2. A[1][1]的起始地址为SA,那么A[1][2]为SA+3,,A[2][1]为SA+3*10,A[i][j]为SA+((i-1)*10+(j-1)*3)
3. 所以A[8][5]的起始地址就是SA+(7*10+4)*3=SA+222
4. 注意的是:起始地址为上一地址的结束地址。