C 指针测试 (测验)

2025 年 3 月 28 日 | 阅读 2 分钟

1) 在结构体中,如果一个变量作为指针,那么在下面的运算符中,哪个运算符用于使用指针变量访问结构体数据?

  1. %
  2. ->
  3. .
  4. #

正确选项是 (b)。

说明

对于结构体,箭头 (->) 用于使用指针变量访问数据,而点 (.) 运算符可用于使用普通结构体变量访问数据。

2) 对于数组元素 a[i][j][k][2],确定等效的指针表达式。

  1. *(*(*(*(a+i)+j)+k)+2)
  2. *( ((a+m)+n+o+p)
  3. ((((a+m)+n)+o)+p)
  4. *( (((a+m)+n)+o+p)

正确选项是 (a)。

说明

对于数组元素 a[i][j],指针表达式是 *(*(a+i)+j)

对于数组元素 a[i][j][k],指针表达式是 *(*(*(a+i)+j)+k)

对于数组元素 a[i][j][k][2],指针表达式是 *(*(*(*(a+i)+j)+k)+2)

3) 表达式 ++*ptr 和 *ptr++ 相同吗?

  1. true
  2. False

正确选项是 (b)。

说明

++*ptr 递增 ptr 指向的值,而 *ptr++ 递增指针而不是值。

4) 选择正确的语句,它是这两个语句的组合:

  1. char *p = (char*)malloc(100);
  2. char *p = (char) malloc(100);
  3. char p = *malloc(100);
  4. 以上都不是

正确选项是 (a)。

说明

下面的代码是 malloc() 函数的原型,其中 ptr 表示指针。

在下面的代码中,"*p" 是 char 数据类型的指针,malloc() 函数用于为 char 分配内存。

5) 对于下面提到的 C 语句,你的评论是什么?

  1. 将抛出运行时错误
  2. 不正确的类型转换
  3. 内存将分配,但无法在内存中保存 int 值
  4. 语句没有问题

正确选项是 (d)。

说明

int 和 unsigned 数据类型的大小相同,因此 C 语句中没有问题

signed int *p=(int*)malloc(sizeof(unsigned int));