C语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

c语言指针知识快速梳理题

1、 语句int *p, q, r; 定义了3个指针变量。 (❌)

说明:
指针定义的时候要指定基类型。
指针变量一定要赋初值

2、执行语句int *p; 后,指针变量p只能指向int类型的变量。 (✅)

3、不同类型的指针变量是可以直接相互赋值的。 (❌)

4、只要将多个指针作为函数的参数,函数就一定会返回多个值。 (❌)

5、 数组的基地址是在内存中存储数组的起始位置,数组名本身就是一个地址即指针值。 (✅)

6、对于定义int a[10],*p=a; 语句p=a+1;和a=a+1;都是合法的。 (❌)
a=a+1 不允许,数组类型“int[10]”不可赋值
因为只有变量才可以被赋值,而a是一个常量,是不能够被赋值的,所以a=a+1是错的。

7、 两个任意类型的指针可以使用关系运算符比较大小。 (✅)
指针变量无非就是一个表示内存地址的长整数而已,当然可以比较

8、若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于__B_。

A. p++
B.x++
C.*(p++)
D.&x++

9、若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x, __A__是正确的。

A.p2=p1
B.p2=**p1
C.p2=&p1
D.p2=*p1

10、设变量定义为 int a[2]={1,3}, *p=&a[0]+1;,则*p的值是(B )。

A.2
B.3
C.4
D.&a[0]+1

11、根据声明int a[10], *p=a; ,下列表达式错误的是(C )。

A.a[9]
B.p[5]
C.a++ 自增自减都是变量,而a是常量,所以不能进行自增自减。
D.*p++

12、若定义pf为指向float类型变量f的指针,下列语句中_B_是正确的。

A.float f, *pf = f;
B.float f, *pf = &f;
C.float *pf = &f, f;
D.float f, *pf =0.0;

13、以下程序的运行结果是(B )

void sub(int x, int y, int *z)
{
    *z = y - x;
}
int main()
{
    int a, b, c;
    sub(10, 5, &a);
    sub(7, a, &b);
    sub(a, b, &c);
    printf("%4d, %4d, %4d\n", a, b, c);
}

A.5, 2, 3
B.-5, -12, -7
C.-5, -12, -17
D.5, -2, -7

14、程序运行后的输出结果是__A__。

#include<stdio.h>
int main( )
{
    int  a[ ]={1,2,3,4,5,6,7,8,9,0},*p;
    for(p=a;p<a+10;p++)    printf("%d,",*p);
    return 0;
}

A.1,2,3,4,5,6,7,8,9,0,
B.2,3,4,5,6,7,8,9,10,1,
C.0,1,2,3,4,5,6,7,8,9,
D.1,1,1,1,1,1,1,1,1,1,

15、如果有定义:int m, n = 5, *p = &m; 与m = n 等价的语句是 (B) 。

A.m = *p;
B.*p = *&n;
C.m = &n;
D.m = **p;

16、以下程序的运行结果是__B__。

#include <stdio.h>
int main()
{
	int  a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;
	printf("%d\n",*p+*q);
	return 0;
}

A.16
B.10
C.8
D.6

17、下列选项中正确的语句组是__D__。

A.char s[8]; s={“Beijing”}; //s是一个常量,不能出现在赋值号左边
B.char *s; *s=“Beijing”;
C.char s[8]; s=“Beijing”;
D.char *s; s=“Beijing”;

在这里插入图片描述

在这里插入图片描述

18、交换实数

输入两个实数,交换后输出。

#include <stdio.h>

void RealSwaps(double *x, double *y);

int main()
{
    double a, b;
    scanf("%lg%lg", &a, &b);
    printf("%g %g\n", a, b);
    RealSwaps(&a,&b);
    printf("%g %g\n", a, b);
    return 0;
}

void RealSwaps(double *x, double *y)
{
    double t = *x;
    *x=*y;
    *y=t;
}

在这里插入图片描述

19、函数insert()的功能是在一维数组 a 中将 x 插入到下标为 i(i>=0) 的元素前,如果 i>= 元素个数,则x插入到末尾。元素个数存放在指针 n 所指向的变量中,插入后元素个数加1。

#include <stdio.h>

void insert(int a[ ], int *n, int x, int i)
{
    int j;
    if (i<*n){
        for (j = *n-1;j>=i;j--){
            a[j+1]=a[j];
        }
    }else{
        i = *n;
    }
    a[i]=x;
    (*n)++;
}

int main()
{
    int a[100], x, i, n;
    scanf("%d", &n);
    for(i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    scanf("%d%d", &x, &i);
    insert(a, &n, x, i);
    for(i = 0; i < n; i++){
        printf("%d " , a[i]);
    }
    printf("\n");
    return 0;
}

在这里插入图片描述

20、以下程序是通过调用函数findmax,找出数组中的最大值。 请填空,实现程序的查找功能。

#include <stdio.h>
#define SIZE 10
void findmax( int *px,int n,int *pmax );
int main()
{
    int max,i=0;
    int x[SIZE];
    for(i=0;i<SIZE;i++)
        scanf("%d", &x[i]);
    findmax(x,SIZE,&max);
    printf("%d\n", max);
    return 0;
}
void findmax(int *px,int n,int *pmax )
{
    *pmax=*px;
    for(int i=1;i<n;i++)
    {
        if(*(px+i)>*pmax)
            *pmax=*(px+i);

    }
    return;
}

在这里插入图片描述

  • 8
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡觉的小馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值