C语言指针基础题(三)


感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 C语言
🐿️🐿️🐿️ C语言例题
🐣🐓🏀 python
以下是后面例题所涉及到的文章,如果有不会的可以点击了解
C语言深入理解指针(非常详细)(一)
字符函数和字符串函数(上)
字符函数和字符串函数(下)
C语言深入理解指针(非常详细)(四)

例题一

以下关于指针的说法,正确的是( )
A.int *const p与int const *p等价
B.const int *p与int *const p等价
C.const int *p与int const *p等价
D.int *p[10]与int (*p)[10]等价

例题解析

const修饰其实就是让修饰的对象不会被改变,因为有时候我们在一些函数中传入了一些数据,而有些数据我们并不希望对其进行修改,所以这时就需要用到const修饰

A :int *const p与int const *p我们必须要明白const修饰的对象
int *const p的const修饰的是p,int const *p的const修饰的是 *p(其实const修饰的就是const后面部分),p和 *p很明显是不等价的,因为p其实是一个指针变量,p指向的地址是不能被修改的,而 *p则是对p解引用后的结果是不能被修改的,所以这两个是不等价的

B :const int *p中const修饰的是 *p(const int *p等价于int const *p),int *const p的const修饰的是p,所以上不等价的

C :const int *p与int const *p是等价的

D:int *p[10]与int (*p)[10]主要一个是指针数组,一个是数组指针,注意要分清哪个是指针数组,哪个是数组指针(可能学了一段时间就会忘记怎么判断)

答案

**答案 C **

例题二

C语言中哪一种形式声明了一个指向char类型变量的指针p,p的值不可修改,但p指向的变量值可修改?( )

A.const char *p
B.char const p
C.char
const p
D.const char *const p

例题解析

这道题和上一题是一样的

const修饰*p,表示p指向的内容不能修改

const修饰p本身,表示p的指向不能修改,p指向的空间中内容可以修改

第一个const表示p指向的内容不能修改,第二个const表示p不能指向其他变量

答案

答案 C

例题三

调整奇数偶数顺序
输入一个整数数组,实现一个函数,

来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,

所有偶数位于数组的后半部分。

例题解析及答案

给定两个下标left和right,left放在数组的起始位置,right放在数组中最后一个元素的位置
循环进行一下操作

如果left和right表示的区间[left, right]有效,进行b,否则结束循环

left从前往后找,找到一个偶数后停止
right从后往前找,找到一个奇数后停止
如果left和right都找到了对应的数据,则交换,继续a

void swap_arr(int arr[], int sz)
{
	int left = 0;
	int right = sz-1;
	int tmp = 0;


	while(left<right)
	{
		while((left<right)&&(arr[left]%2==1))
		{
			left++;
		}
     
		while((left<right)&& (arr[right]%2==0))
		{
			right--;
		}
		if(left<right)
		{
			tmp = arr[left];
			arr[left] = arr[right];
			arr[right] = tmp;
		}
	}
}

例题四

模拟实现库函数strcpy

答案

char * my_strcpy(char * dst, const char * src)
{
        char * cp = dst;
        while( *cp++ = *src++ );
        return( dst );
}

例题五

模拟实现库函数strlen

例题解析及答案

size_t my_strlen (const char * str)
{
        const char *eos = str;
        while( *eos++ ) ;
        return( eos - str - 1 );
}
  • 60
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 37
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值