(In addition to other answers, which you would read first and probably should help you more ...)
Read a good C programming book. Pointers and addresses are very difficult to explain, and I'm not even trying to. So the address of a pointer &ptr is generally not the same as the value of a pointer (however, you could code ptr= &ptr; but you often don't want to do that)... Look also at the picture explaining virtual address space.
Then read more documentation about malloc: malloc(3) Linux man page, this reference documentation, etc... Here is fast, standard conforming, but disappointing implementation of malloc.
read also documentation about printf: printf(3) man page, printf reference, etc... It should mention %p for printing pointers...
Notice that you don't print a pointer (see Alk's answer), you don't even print its address (of an automatic variable on the call stack), you print some cast to size_t (which might not have the same bit width as a pointer, even if on my Linux/x86-64 it does).
Read also more about C dynamic memory allocation and about pointer aliasing.
At last, read the C11 standard specification n1570.
(I can't believe why you would expect the two outputs to be the same; actually it could happen if a compiler is optimizing the call to mymalloc by inlining a tail call)
So I did not expect the output to be the same in general. However, with gcc -O2 antonis.c -o antonis I've got (with a tiny modification of your code)....
a surprise
However, if you declare the first void *mymalloc(size_t bytes) as a static void*mymalloc(size_t bytes) and compile with GCC 7 on Linux/Debian/x86-64 with optimizations enabled, you do get the same output; because the compiler inlined the call and used the same location for bitv and ptr; here is the generated assembler code with gcc -S -O2 -fverbose-asm antonis.c:
    .section    .rodata.str1.1,"aMS",@progbits,1
.LC0:
    .string "Address1 = %zx\n"
.LC1:
    .string "Address2 = %zx\n"
    .section    .text.startup,"ax",@progbits
    .p2align 4,,15
    .globl  main
    .type   main, @function
main:
.LFB22:
    .cfi_startproc
    pushq   %rbx    #
    .cfi_def_cfa_offset 16
    .cfi_offset 3, -16
# antonis.c:5: void * ptr = malloc(bytes);
    movl    $5, %edi    #,
# antonis.c:11: {
    subq    $16, %rsp   #,
    .cfi_def_cfa_offset 32
# antonis.c:6: printf("Address1 = %zx\n",(size_t)&ptr);
    leaq    8(%rsp), %rbx   #, tmp92
# antonis.c:5: void * ptr = malloc(bytes);
    call    malloc@PLT  #
# antonis.c:6: printf("Address1 = %zx\n",(size_t)&ptr);
    leaq    .LC0(%rip), %rdi    #,
# antonis.c:5: void * ptr = malloc(bytes);
    movq    %rax, 8(%rsp)   # tmp91, ptr
# antonis.c:6: printf("Address1 = %zx\n",(size_t)&ptr);
    movq    %rbx, %rsi  # tmp92,
    xorl    %eax, %eax  #
    call    printf@PLT  #
# antonis.c:13: printf("Address2 = %zx\n",(size_t)&bitv);
    leaq    .LC1(%rip), %rdi    #,
    movq    %rbx, %rsi  # tmp92,
    xorl    %eax, %eax  #
    call    printf@PLT  #
# antonis.c:14: }
    addq    $16, %rsp   #,
    .cfi_def_cfa_offset 16
    popq    %rbx    #
    .cfi_def_cfa_offset 8
    ret
    .cfi_endproc
.LFE22:
    .size   main, .-main
BTW, if I compile your unmodified source (without static) with gcc -fwhole-program -O2 -S -fverbose-asm I'm getting the same assembler as above.
If you don't add static and don't compile with -fwhole-program the two Adddress1 and Address2 stay different.
two run outputs
I run that antonis executable and got on the first time:
/tmp$ ./antonis
Address1 = 7ffe2b07c148
Address2 = 7ffe2b07c148
and the second time:
/tmp$ ./antonis
Address1 = 7ffc441851a8
Address2 = 7ffc441851a8
If you want to guess why the outputs are different from one run to the next one, think of ASLR.
BTW, a very important notion when coding in C is that of undefined behavior (see also this and that answers and the references I gave there). You don't have any in your question (it is just unspecified behavior), but as my contrived answer shows, you should not expect a particular behavior in that precise case.
PS. I believe (but I am not entirely sure) that a standard conforming C implementation could output Address1= hello world and likewise for Address2. After all, the behavior of printf with %p is implementation defined. And surely you could get 0xdeadbeef for both. More seriously, an address is not always the same (of the same bitwidth) than a size_t or an int, and the standard defines intptr_t in <stdint.h>