1.7 C/C++ 数组 && 位操作

一、以下代码表示什么意思?

*(a[1]+1)、*(&a[1][1])、(*(a+1))[1]
*(a[1]+1):相当于a[1][1]
*(&a[1][1]):相当于 a[1][1]
(*(a+1))[1]:相当于 a[1][1]
//&a指向的是整个二维数组的地址;a指向的是二维数组的第一行起始地址;a[1]指向的是第一行第一个元素的起始地址;a[1][1]:对第一行第一个元素取值

二、数组下标可以为负数吗?

可以。数组下标只是相当于当前数组起始地址的偏移量而已。可能代表向前寻址。

三、数组如果在栈上分配,其大小必须在编译时确定

char* getBuffer(int size) {
    char a[size];
    return a;
}
// 两个错误:
// 1、a 是局部变量,作为了返回值
// 2、数组如果是在栈上分配,必须在编译时确定大小。

四、求解整型数二进制中 1 的个数

#include <stdio.h>

// 方法一:逐位检查
int countOnes1(int num) {
    int count = 0;
    for (int i = 0; i < sizeof(int) * 8; i++) {
        if (num & (1 << i)) {
            count++;
        }
    }
    return count;
}

// 方法二:Brian Kernighan 算法
int countOnes2(int num) {
    int count = 0;
    while (num) {
        num &= (num - 1);
        count++;
    }
    return count;
}

int main()

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++/嵌入式开发 秋招面经 文章被收录于专栏

一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。

全部评论
收藏了
点赞 回复 分享
发布于 04-03 00:18 河北
问下进度
点赞 回复 分享
发布于 04-01 23:10 河北
欢迎订阅专栏《C++/嵌入式开发 秋招面经》 :https://www.nowcoder.com/creation/manager/columnDetail/MKaoll
点赞 回复 分享
发布于 03-30 17:05 河北

相关推荐

评论
5
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务