int num = 0;
int *realPointer = #
int fakePointer = #
In last two statements, any real difference between the realPointer and fakePointer.
bạn fakePointer
KHÔNG phải là một con trỏ. Đó là một số nguyên với giá trị là địa chỉ của biến num. Bạn có thể lấy đi khi biên dịch này với các tùy chọn mặc định. Nhưng như Lundin đã chỉ ra, đây thực sự là một mã không hợp lệ. Sử dụng gcc
với CFLAGS="-g -Wall -std=c99 -O3 -pedantic-errors"
cờ, bạn sẽ nhận được lỗi này:
error: initialization makes integer from pointer without a cast
Trong khi bạn realPointer
thực sự trỏ đến biến num
, và bạn có thể dereference nó. Bạn không thể làm gì giống như vậy với số fakePointer
của mình - và trên thực tế việc gán cho chính mình là fakePointer
không hợp lệ.
Khi yêu cầu "thực hiện hai bit mã C này cung cấp cùng chức năng", vui lòng đăng mã thực sự biên dịch. Một trong các biến trên làm một cái gì đó, cái kia là một lỗi biên dịch-thời gian: rõ ràng, một lỗi thời gian biên dịch không có chức năng tương tự như một cái gì đó mà biên dịch. – Yakk
@Yakk Với 'gcc' (ví dụ), đây chỉ là một cảnh báo, không phải là lỗi:' cảnh báo: khởi tạo làm cho số nguyên từ con trỏ mà không có một ký tự ' –