Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Gặp lỗi khi thao tác với con trỏ void (VC 2k10)

  1. #1
    Ngày gia nhập
    04 2010
    Bài viết
    5

    Mặc định Gặp lỗi khi thao tác với con trỏ void (VC 2k10)

    Mình có đoạn chương trình như sau:
    Code:
    #include <iostream>
    using namespace std;
    void main ()
    {
    	int a=5;
    	float b=10.6;
    	void *p=&a;
    	*(int*)p - 5;
    	p=&b;
    	*(int*)p - 0.6;
    	cout<<"Gia tri cua 2 bien sau khi thay doi: "<<a<<"\t"<<b<<"\t";
    }
    Khi chạy nó báo lỗi:
    Code:
    1>------ Build started: Project: Project, Configuration: Debug Win32 ------
    1>  Ex1.cpp
    1>c:\users\hacker1805\documents\visual studio 2010\projects\project\project\ex1.cpp(7): warning C4305: 'initializing' : truncation from 'double' to 'float'
    1>c:\users\hacker1805\documents\visual studio 2010\projects\project\project\ex1.cpp(9): warning C4552: '-' : operator has no effect; expected operator with side-effect
    1>c:\users\hacker1805\documents\visual studio 2010\projects\project\project\ex1.cpp(11): warning C4552: '-' : operator has no effect; expected operator with side-effect
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    Các bạn cho mình hỏi:
    1. những lỗi này là lỗi gì?.
    2. Mình thấy trong sách ghi (int*)*p nhưng mình dùng thì VC 2k10 không cho
    Loay hoay cả buổi mà chưa tìm ra ^^. thank đã đọc bài...!

  2. #2
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    ko phải lỗi, chỉ là warning.

    1>c:\users\hacker1805\documents\visual studio 2010\projects\project\project\ex1.cpp(7): warning C4305: 'initializing' : truncation from 'double' to 'float'

    tự chuyển 10.6 từ kiểu double thành float để gán cho b

    *(int*)p - 0.6;
    *(int*)p - 5;

    hai dòng này chẳng có tác dụng gì cả.

  3. #3
    Ngày gia nhập
    04 2010
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi pkthanh92 Xem bài viết

    *(int*)p - 0.6;
    *(int*)p - 5;

    hai dòng này chẳng có tác dụng gì cả.
    Bạn giải thích cho mình rõ hơn chút được không?. Mình khai báo con trỏ void. và trừ biến a 5 đơn vị, trừ biến b 0.6 đơn vị bằng con trỏ. mình sai ở đâu vậy. Nếu sửa lại cho đúng thì phải viết như thế nào? Cám ơn đã reply...!

  4. #4
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    sửa 2 dòng đấy thành

    *p = *(int*)p - 0.6;
    *p = *(int*)p - 5;

  5. #5
    Ngày gia nhập
    04 2010
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi pkthanh92 Xem bài viết
    sửa 2 dòng đấy thành

    *p = *(int*)p - 0.6;
    *p = *(int*)p - 5;
    Sau khi sửa theo lời bạn thì nó báo lỗi:
    Code:
    1>------ Build started: Project: Example, Configuration: Debug Win32 ------
    1>  Ex1.cpp
    1>c:\users\hacker1805\documents\visual studio 2010\projects\example\example\ex1.cpp(6): warning C4305: 'initializing' : truncation from 'double' to 'float'
    1>c:\users\hacker1805\documents\visual studio 2010\projects\example\example\ex1.cpp(8): error C2100: illegal indirection
    1>c:\users\hacker1805\documents\visual studio 2010\projects\example\example\ex1.cpp(8): error C2440: '=' : cannot convert from 'int' to 'void *'
    1>          Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
    1>c:\users\hacker1805\documents\visual studio 2010\projects\example\example\ex1.cpp(10): error C2100: illegal indirection
    1>c:\users\hacker1805\documents\visual studio 2010\projects\example\example\ex1.cpp(10): error C2440: '=' : cannot convert from 'double' to 'void *'
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

  6. #6
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    Mặc định Gặp lỗi khi thao tác với con trỏ void (VC 2k10)

    sorry bạn, mình chưa test

    bạn sửa lại như sau:

    *((float*)p) = *(int*)p - 0.6;
    *((int*)p) = *(int*)p - 5;

Các đề tài tương tự

  1. Kỹ thuật C Sự khác nhau giữa khai báo void main(), int main(void) và int main(int argv, char *argc[])?
    Gửi bởi v_huster38 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 21-11-2013, 12:10 PM
  2. Mã nguồn C Lỗi initializing argument 5 of `int search(void*, int, int, int, void*, int (*)(void*, void*))'tìm kiếm nhị phân
    Gửi bởi dienkun trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 14-01-2012, 12:08 AM
  3. điểm khác nhau giữa hàm void abc(int a) và void abc (int &a ) là gì?
    Gửi bởi phuongnd trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 06-04-2011, 10:51 AM
  4. Lỗi error LNK2005: "public: void __thiscall binary::nhap(void)"?
    Gửi bởi withlovei trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 23-02-2011, 09:13 PM
  5. Gán giá trị biến kiểu void trong c như thế nào?
    Gửi bởi harunaga trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 23-02-2010, 11:58 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn