Void işaretci 1 arttırıldığında işaretcinin değeri ne olur? (C Programlama)

NovayaZemlya

Yeni Üye
Katılım
19 Haziran 2023
Mesajlar
1
64 bitlik bir islemci mimarisinde ilk degerini siklarda "base" olarak gosterdigimiz (bu bir adres degeri) bir "void" isaretci 1 arttirildiginda isaretcinin degeri ne olur? (Derlemenin ANSI C gibi C standardina uygun seceneklerle yapıldıgını varsayin.)
A-base + 0000000F
B- base + 0000F000
C- base + F0000000
D- base + 000000F0
E- C standartlannda bu anlamli bir islem degildir.

Açıklayarak soruyu çözer misiniz?
 
C standardına göre bir void işaretçinin değerini 1 attırmak tanımlı değil. Ama sadece standardın ne dediğine bakarsan işi çok eksik bırakmış olursun. Mesela ben şimdi gcc ile denedim, void pointere 1 eklersen değeri 1 artıyor. gcc deki tüm uyarıları açıyorum, gene hiç sıkıntı çıkarmadan 1 arttırıyor.

Ama aynı işlemi g++ ile yaparsan (C++ derleyicisi), o zaman sadece uyarı veriyor, ama gene programı derlemiş oluyor.

Kod:
#include <stdio.h>

void* ptr = (void*)0x100000;

int main(void)
{
    printf("ptr = %p\n", ptr);
    ptr = ptr + 1;
    printf("ptr = %p\n", ptr);

    return 0;
}

Kod:
[ta@bonsai ~]$ gcc a.c
[ta@bonsai ~]$
[ta@bonsai ~]$ ./a.out
ptr = 0x100000
ptr = 0x100001
[ta@bonsai ~]$
[ta@bonsai ~]$ gcc -Wall a.c
[ta@bonsai ~]$
[ta@bonsai ~]$ ./a.out
ptr = 0x100000
ptr = 0x100001
[ta@bonsai ~]$
[ta@bonsai ~]$
[ta@bonsai ~]$ g++ a.c
a.c: In function ‘int main()’:
a.c:8:15: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]
    8 |     ptr = ptr + 1;
      |           ~~~~^~~
[ta@bonsai ~]$
[ta@bonsai ~]$
[ta@bonsai ~]$ ./a.out
ptr = 0x100000
ptr = 0x100001
[ta@bonsai ~]$
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
8,866
Mesajlar
144,197
Üyeler
3,561
Son üye
ecem oruç

Son kaynaklar

Back
Top