牛客网C/C++学习笔记20.2.7

这篇博客探讨了C/C++编程中的字符串替换函数,详细解释了如何将字符串中的特定字符转换为大写。此外,文章还讨论了vector的不同初始化方式,并分析了指针在数组和多维数组操作中的应用,包括指针表达式引用数组元素的方法。同时,博主还讲解了左值和右值的概念,以及相关运算符的使用规则。最后,文章通过示例代码解析了指针和地址的修改对变量值的影响,以及while循环的执行次数分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.有以下程序,输出:

#include<stdio.h>
void ss (char *s,char t) 
{ 
while (*s) 
{ 
if(*s==t) *s=t-'a'+'A';
 s++; 
} 
} 
int main() 
{ 
    char str1[100]="abcddfefdbd",c='d';
    ss (str1,c); 
    printf ("%s\n",str1); 
    return 0;
} 

输出结果: abcDDfefDbD

**程序作用:**函数ss的功能就是将字符串s中的所有字符为t的字符替换为大写字符。对
于主函数中的函数ss的调用,就是将字符串str1中的小些字符’d’替换成大写字符’D’。

2.关于vector<>初始化问题下面那个是非法的?在这里插入图片描述解析:
vector初始化方式有四种:

  1. vector v(10); 表示创建size为10的vector,每个元素执行默认初始化;
  2. vector v(10,1);表示创建size为10的vector,每个元素初始化为1;
  3. vector v{1,2,3,4};表示创建size为4的vector,元素的值分别为1,2,3,4。
  4. vector v; 表示创建size为0的vector;

3.若言int a[10],*p=a;则以下表示中不能代表a[6]的是()。在这里插入图片描述解析:
P是指整型数组a的一个指针(首地址),p+6也只是a[6]的地址而已,本身还是一个指针。

4.下面哪个指针表达式可以用来引用数组元素a[i][j][k]l在这里插入图片描述解析:

a:整个四维数组的地址
*(a+i) = a[i]
*(a+i)+j = a[i] +j
*((a+i)+j) = a[i][j]
*((a+i)+j)+k = a[i][j]+k
*( *((a+i)+j)+k ) = a[i][j][k]
*( *((a+i)+j)+k )+l = a[i][j][k]+l
*( *( ((a+i)+j)+k )+l ) = a[i][j][k][l], 选项B少了和()
不管多少维,按照这个思路,不会差

5.下列表达式正确的是:在这里插入图片描述解析:

++运算符的对象必须是左值,而表达式的值都是右值。
区分左值与右值的最简单方式就是:左值可以对其取地址赋值,右值不可以取地址。
a++表达式的本质是编译器翻译成a=a+1;
因此A 9=9+1?
B x+y=x+y+1? C++左值表达式不能有运算符。
C c++ + c++ + c++。三个表达式的意思其实就是。
a=c++; b=c++;c=c++ +a +b;
当然结果就相当于3*c+2;
D 选项与B类似。

6.输入以下代码,得到结果()

#include<iostream>
using namespace std;
void f(int *p,int *q)
{
    p++;
    *q=*q+1;
}
int main() {
    int m=1,n=2,*r=&m;
    f(r,&n);
    cout<<m<<","<<n;
    return 0;
}

输出结果: 1,3
解析:
f(r,&n); 指针r指向m的地址。
调用该函数时,将m和n的地址复制一份赋值给指针p和q;
在函数体中,将指针p加1,即p指向m的下一个地址,函数调用结束后该指针即被释放,m的地址不变;
在函数体中,将指针q所指内容加1,即n+1,这样就间接通过q改变了n的值。

8.k为int类型,以下while循环执行次。 在这里插入图片描述解析: k是无符号整数,永远都>=0。

9.以下说法正确的是: 在这里插入图片描述解析:
*a=a+b;在a和b都比较大的时候,会出现越界的问题;
正确的做法是:
a=a^b;
b=a^b;
a=a^b;

10.在C++语言中,下列说法正确的是:在这里插入图片描述解析:
A,如果内联函数定义在调用函数的后面,则编译器会将其当作普通函数调用来看,并不会直接插入到调用处。
B,可以重名。
C,局部全局变量存储在全局区,而不是堆栈区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值