2012-06-21 52 views
10

Dưới đây là đoạn code mẫu mà tôi chạy trên Visual Studio 2010:C++: Khởi tạo con trỏ đến con trỏ đến int

#include <iostream> 

int main() 
{ 
    int **p(NULL); 
} 

tôi nhận được lỗi này: error C2059: syntax error : 'constant'

Nhưng nếu tôi thay đổi int **p(NULL);-int **p = NULL; sự trên mã biên dịch tốt.

Đã kiểm tra điều này trên GCC (Phiên bản: 4.4.2) và cả hai đều hoạt động tốt. Tôi đang thiếu gì ở đây?

+0

có thể, trình biên dịch của bạn không hỗ trợ. –

+0

Dường như là một lỗi trong trình biên dịch. Hấp dẫn! Lưu ý rằng 'int * p (0);' works, trong khi 'int ** p (0);' thì không. – avakar

+1

Lưu ý rằng nếu bạn định nghĩa 'typedef int * PINT;' và sau đó viết 'PINT * p (NULL);' nó cũng hoạt động tốt. 'int ** p (NULL);' chắc chắn phải hoạt động tốt. Thực tế là nó không thú vị. – LihO

Trả lời

3

VC++ biên dịch có vẻ bối rối về initializations của con trỏ đến con trỏ ...

này hoạt động ví dụ

int (**p)(NULL); 

Những không

int *i; 
int **p(&i); 
int **o(NULL); 

này hoạt động mặc dù

int (**p)(&i); 
typedef int* intp; 
intp *o(NULL); 

v.v ... mẫu được khởi tạo không thành công bất cứ khi nào có hai **! Tôi đoán một lỗi! Người trong nhóm MSVC có thể có thể xác nhận

-6

Bạn nhận được lỗi cú pháp: dường như NULL không được xác định. Bạn nên bao gồm cstdlib.

+5

Ông đã viết rằng 'int ** p = NULL;' hoạt động. – LihO

0

Đó là một lỗi trong trình biên dịch, hoặc có thể bạn đã làm điều gì đó và hỏi cái gì khác.

MSVC10 hỗ trợ vài tính năng từ C++ 11, chẳng hạn như sau:

int **p1 = nullptr; 
int **p2{}; //initialized to nullptr! 

Bạn có thể thử bất kỳ trong số này. Cả hai đều ổn.

+2

Điều đó hoàn toàn khác .. Tập trung vào câu hỏi bạn thân .. :) –

+1

@Ashwinkumar: Được rồi. Đã chỉnh sửa câu trả lời của tôi. – Nawaz

+1

@Nawaz: Tôi đã không hỏi bất cứ điều gì khác hơn những gì tôi đã làm :) – omggs

0

Hình như, khiếm khuyết với Visual studio, Nó hoạt động nếu tôi sử dụng C++ để biên dịch @http://codepad.org/ và chạy đoạn mã sau

int main() 
{  
    int **p(NULL); 
    return 0; 
} 

công trình tương tự sử dụng g ++ biên dịch cũng .

Các vấn đề liên quan