Hỏi về phép toán trên con trỏ

#include<stdio.h>
long long int* main_pTest = (long long int*)0x7766554433221100;

int main(void)
{
	char* pTest = (char*)&main_pTest;

	pTest = pTest + 4;
	printf("%x", *pTest);
	getchar();
	return 0;
}

E có đoạn code như trên. E test thử với pTest = pTest + 1 đến 3; thì ra kết quả đúng là 11 22 33 nhưng khi cộng đến 4 thì lại ra số 1. Cộng thêm 5 thì lại ra 0
Khi e thử thay 0x7766554433221100 thành 0x776655443322ab00 thì pTest + 1 lại ra ffffffab.
E đang code trên visual studio 2010 ạ
Mong mọi người giải thích giúp e với ạ. Em cảm ơn

Đến 4 mà sai thì chắc lli trên máy bạn chỉ có 4 bytes th. :kissing:
Bạn in size của main_pTest ra xem là bn bytes.

#include<stdio.h>
long long int* main_pTest = (long long int*)0x7766554433221100;

int main(void) {
	char* pTest = (char*)&main_pTest;

    printf("size of main_pTest: %ld bytes\n", sizeof(*main_pTest));
    for (int i = 0; i < 8; ++i) {
        printf("%02x\n", *(pTest + i));
    }
}

Binh thường nè.

size of main_pTest: 8 bytes
00
11
22
33
44
55
66
77
6 Likes

e lấy nguyên code của a chạy thì ra thế này
size of main_pTest: 8 bytes
00
11
22
33
01
00
00
00

1 Like

e nhớ ko nhầm thì chỉ có kiểu long là mới tùy 4 hay 8 byte. còn long long thì lúc nào cũng 8 byte

Hằng số nguyên mặc định là int, nên bị cắt 4 byte cao rồi.

4 Likes

Mình đoán chắc pointer long long int trên máy bạn chỉ có 4 bytes.

3 Likes

sizeof(*main_pTest) = 8 nhưng chưa chắc sizeof(main_pTest) cũng bằng 8 nha. :kissing:

Thường là tùy vào máy bạn bao nhiêu bit hoặc bạn chọn build bản 32 hay 64 bit mà pointer size nó cũng theo đó mà 32 hay 64 bit luôn.

Nên muốn đoạn code kia đúng hơn thì phải để main_pTest là kiểu long long int chứ không phải long long int*. :slightly_smiling_face:

3 Likes

máy mình 64 bit. Nhưng kiểm tra thì sizeof(main_pTest) = 4 thật. Bạn bảo chọn đc build bản 32 hay 64 bit thì chọn thế nào ấy nhỉ. Mình dùng visual studio 2010

  • Mở google hoặc bất kỳ search engine nào bạn thích
  • Nhập vào dòng chữ build 64 bits program in vs 2010
  • Nhấn tìm kiếm hoặc hình kính lúp cạnh trường input, không thì nhấn enter cũng được.

Còn nếu nhanh thì chọn x64 cạnh chữ debug (không biết VS 2010 có giống không, nên cứ gg cho chắc). :kissing:
image

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?