目录
1.假定有语句“ int b[10], *pb; ”,则不正确的赋值为 ( )。
3. 在上下文和头文件均正常的情况下,程序输出结果为A,正确还是错误?
5.设a为int型变量,执行下列赋值语句后,a的取值分别是( )
a=125.534; a=(int)125.521%4; a=5<<2;
6.阅读以下程序,当输入数据的形式为12a345b789↙,正确的输出结果为()
7.下列说明中 const char *ptr;ptr应该是()
1.假定有语句“ int b[10], *pb; ”,则不正确的赋值为 ( )。
//对指针类型仍然可以使用 int -> 指针的转换
char *p1 = 1; //可行
char *p2 = 1.0; //不可行
int a1 = 1;
const int a2 = 1;
float b1 = 1.0;
char *p3 = a1; //或 a2 或 b1; 都会报错
char *p4 = "abc";
char *p5 = p4 + 10; //可行
char *p6 = p4 + a1; //可行
int *p7 = &a1; //可行
//综上所述,上述仅有整形常量到指针、由已有指针推断和已有变量推断三种形式是可行的,其他的都不行
2.下方代码运行后的结果是
#include <stdio.h>
int main() {
int a[3][4] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23};
int(*p)[4] = a, i, j, k = 0;
for (i = 0; i < 3; i++)
for (j = 0; j < 2; j++)
k = k + *(*(p + i) + j);
printf("%d", k);
return 0;
}
答案:60
解析:
int (*p)[4]= a;说明 p是一个指针数组,长度为4,存储的是二维数组每行的地址。
p指向a的首地址 &a[0][0].
*(p+i) 相当于p[i],p[i]存储的是二维数组a的i行的数据地址。即p[i]=&a[i][0];
*(p+i)+j 存储的是a[i][j]的地址。*(*(p+i)+j)即是a[i][j]的值。
根据i j循环。i<3,j<2,即是取二维数组三行的前两列的值的