C 面试题(施工中...)


地址转换问题

#include <iostream>
using namespace std;

int main() {
    char test[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
    int *test_p = (int *)test;
    int a = test_p[0];
    printf("ox%X", a);
    return 0;
}
/*
ox4030201
*/

unsigned long几个字节

unsigned long 的大小(以字节为单位)取决于编译器和平台。在不同的系统和编译器中,unsigned long 的大小可能会有所不同。

在许多现代系统和编译器中,unsigned long 通常是 4 字节(32 位)或 8 字节(64 位)。但在某些旧的或特定的系统上,它可能是其他大小。

要确定特定编译器和平台上的 unsigned long 的大小,你可以使用 sizeof 运算符(在 C 或 C++ 中)。例如:

#include <stdio.h>

int main() {
    printf("Size of unsigned long: %zu bytes\n", sizeof(unsigned long));
    return 0;
}

运行上述代码将输出 unsigned long 在你的特定系统上的大小(以字节为单位)。


指针地址的使用

#include <iostream>
using namespace std;

struct Test {
    int Num;
    char *pcName;
    short sDate;
    char cha[2];
    short sBa[4];
} *p;

int main() {
    Test t;
    p = (struct Test *)&t;
    printf("sizeof(Test) = %d\n", sizeof(Test));
    printf("%X\n", p);
    printf("%X\n", p + 0x1);
    printf("%X\n", (unsigned long*)p + 0x1);
    printf("%X\n", (unsigned int*)p + 0x1);
    return 0;
}
/*
sizeof(Test) = 32
61FE00
61FE20
61FE04
61FE04
*/
posted @ 2024-01-18 17:55  guanyubo  阅读(6)  评论(0编辑  收藏  举报