c++ 错题 好题

对于内置类型而言,new仅仅是分配内存,除非后面显示加(),相当于调用它的构造函数,对于自定义类型而言,只要一调用new,那么编译器不仅仅给它分配内存,还调用它的默认构造函数初始化,即使后面没有加()

 

0<=rand()%(n-m+1)<=n-m

 

int a[] = { 1, 2, 3, 4 };

printf("%d\n", sizeof(*a));     //4    对首元素的地址进行解引用取到首元素的值,为int型

printf("%d\n", sizeof(a + 1));  //4    sizeof(&a[1])

printf("%d\n", sizeof(a[1]));   //4    数组的每个元素都是整型

printf("%d\n", sizeof(&a));     //4 取到整个数组的地址(地址为四个字节存储)

printf("%d\n", sizeof(&a + 1));         //4    地址的大小为四个字节

printf("%d\n", sizeof(&a[0]));          //4    地址的大小为四个字节

printf("%d\n", sizeof(&a[0] + 1));      //4    地址的大小为四个字节

printf("%d\n", sizeof(*&a));          //16   &a取到整个数组的地址,再解引用取到整个数组

 

 

指针即为地址 一般是32位系统,所以是4个字节

 

函数重载不需要是成员函数,在类外声明或定义的函数同样可以对其进行重载

错题:

void Func(char str_arg[100])

{

       printf("%d\n",sizeof(str_arg));

}

int main(void)

{

     char str[]="Hello";

     printf("%d\n",sizeof(str));

    printf("%d\n",strlen(str));

    char*p=str;

    printf("%d\n",sizeof(p));

    Func(str);

}

牛客网:6 5 4 4

解析:

  1. str是复合类型数组char[6],维度6是其类型的一部分,sizeof取其 维度*sizeof(char),故为6
  2. strlen c类型string 的长度,不含尾部的'\0',故为5
  3. p只是个指针,32位机上为4
  4. c++中不允许隐式的数组拷贝,所以Func的参数会被隐式地转为char*,故为4

 

错题:

char str[] = "glad to test something";

char *p = str;

p++;

int *p1 = reinterpret_cast<int *>(p);

p1++;

p = reinterpret_cast<char *>(p1); 

printf("result is %s\n", p);

 

答案:result is to test something

该题的关键是要认清楚强制类型转换后指针的类型。

p的类型为char *p++p指向str数组的第2个元素即字母“l”的位置。

p1的类型为int *p1++p1指向的位置增加4个字节,指向str数组中的第6个元素即字母“t”的位置。

因此最后p的内容为“to test something”

 

错题:

C c;

void main()

{

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值