các bạn cho mình hỏi trong ngôn ngữ C, kích thước con trỏ là bao nhiêu?
Announcement
Collapse
No announcement yet.
Ngôn ngữ C: kích thước biến con trỏ
Collapse
X
-
Mình nghĩ là tùy vào trình biên dịch , chứ bản thân ngôn ngữ C nói riêng và ngôn ngữ nói chung chỉ là 1 tập các từ khóa và cú pháp tạo thành ngôn ngữ lập trình và một số hỗ trợ nhất định, vì thế chúng ko quy định trước kích thước ô nhớ. Con trỏ cũng là 1 ô nhớ , trình biên dịch muốn quy định nó là mấy byte thì tùy thôi.
Comment
-
Originally posted by CH1101146 View PostTheo mình biết thì sizeof(pointer) = sizeof(int) trên tất cả các systemCode:$ cat test.c #include <stdio.h> int main(){ printf("sizeof(int*) = %d\nsizeof(int) = %d\n", sizeof(int*), sizeof(int)); } $ gcc test.c -o test test.c: In function ‘main’: test.c:4:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat] test.c:4:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long unsigned int’ [-Wformat] $ ./test [B][SIZE=5]sizeof(int*) = 8 sizeof(int) = 4[/SIZE][/B] $ uname -a Linux localhost 3.8.13-gentoo #1 SMP Sat May 18 20:30:06 ICT 2013 x86_64 Intel(R) Core(TM) i5-3550 CPU @ 3.30GHz GenuineIntel GNU/Linux $ gcc -v Using built-in specs. COLLECT_GCC=/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3/gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/4.6.3/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /var/tmp/portage/sys-devel/gcc-4.6.3/work/gcc-4.6.3/configure --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.6.3 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.6.3/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.6.3/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include/g++-v4 --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --disable-altivec --disable-fixed-point --without-cloog --without-ppl --disable-lto --enable-nls --without-included-gettext --with-system-zlib --enable-obsolete --disable-werror --enable-secureplt --enable-multilib --enable-libmudflap --disable-libssp --enable-libgomp --with-python-dir=/share/gcc-data/x86_64-pc-linux-gnu/4.6.3/python --enable-checking=release --disable-libgcj --enable-libstdcxx-time --enable-languages=c,c++,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-targets=all --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.6.3 p1.13, pie-0.5.2' Thread model: posix gcc version 4.6.3 (Gentoo 4.6.3 p1.13, pie-0.5.2) $
Comment
-
Kích thước của con trỏ phụ thuộc vào người thiết kế trình biên dịch C chứ không phải do quy định của ngôn ngữ C...
đây là một ví dụ, một con trỏ có kích thước là 3 bytes
KeilC là một trình biên dịch cho Vi điều khiển cụ thể là 8051 ... cho nên tổ chức bộ nhớ của nó có một chút khác biệt so với các hệ thống mà các bạn ví dụ ở trên
Theo mình nghĩ, người ta sẽ cố gắng chọn kích thước con trỏ sao cho tối ưu về mặt truy xuất bộ nhớ nhất... và kích thước con trỏ bằng với kích thước thanh ghi của hệ thống đích, có lẽ là tối ưu nhất :shy:Last edited by 08520229; 19-06-2013, 16:18.Một khẩu súng giữ hai trời Nam Bắc,
Một dấu chân in màu đất hai miền.
------------------------------------------------------
Comment
Comment