以下关于指针的说法,正确的是( )
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.charconst p
D.const char *const p
这道题和上一题是一样的
const修饰*p,表示p指向的内容不能修改
const修饰p本身,表示p的指向不能修改,p指向的空间中内容可以修改
第一个const表示p指向的内容不能修改,第二个const表示p不能指向其他变量
答案
调整奇数偶数顺序
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
给定两个下标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 );
}