Bisakah Anda membantu saya memahami item dasar ini:

Saya memiliki dua varibale i dan J , permintaan saya adalah saya telah menginisialisasi "I" dan kemudian "J", tetapi alamat pertama dialokasikan ke J alih-alih "I".

Bisakah Anda membantu saya memahami mengapa?

Alamat untuk I dan 4 bit lebih tinggi dari J

#include<stdio.h>
int main()
{
    int i;
    printf("%d",sizeof(int));
    printf("enter the number to multiply wuth 1 through 10:");
    scanf("%d",&i);
    printf("size of I:%d\n",sizeof(i));
    for(int j=0;j<=10;j++){
    
        printf("%d\n",i*j);
        printf("Address of j:%d\n",&j);
    }
    printf("%d",&i);
    return 0;
}

0
vishal mukkapati 11 Mei 2021, 21:45

2 jawaban

Jawaban Terbaik

Kompiler menggunakan algoritme mereka sendiri untuk memutuskan bagaimana mengalokasikan memori di antara variabel, berdasarkan banyak faktor seperti penyelarasan dan penggunaan saluran cache. Tidak ada jaminan bahwa mereka akan diatur dalam memori dalam urutan yang sama dengan pernyataan mereka, atau alasan khusus untuk mengharapkan hal ini terjadi. (Dan kecuali Anda mengambil alamat variabel, itu dapat dioptimalkan ke dalam register yang tidak menempati memori sama sekali.)

5
Nate Eldredge 11 Mei 2021, 18:50

Ini sepenuhnya bergantung pada kompiler. Karena semua variabel ini disimpan di Stack, kami tidak dapat memutuskan alamat mana yang diberikan ke variabel mana. Cobalah untuk menjalankan kode yang sama beberapa kali dan Anda mungkin menemukan alamat I diberikan sebelum j.

Terima kasih

1
Akhilesh Gangwar 11 Mei 2021, 18:51