2011-10-12 66 views
7

Các bài tập sau đây có hợp lệ không? Hoặc sẽ có bất kỳ vấn đề nào trong số này gây ra sự cố. Xin đề nghị.const char pointer assignments

const char * c1; 
const char * c2; 
const char * c3; 
char * c4; 

c2 = c1; 
c2 = c3; 
c2 = c4; 

Điều gì sẽ xảy ra nếu tôi thực hiện những việc sau đây?

const char * c5 = "xyz"; 
char * c6 = "abc"; 

c2 = c5; 
c2 = c6; 
+0

@ Kshitij Mehta - không phải là một bài tập về nhà, chúng tôi đang đối mặt với vấn đề bộ nhớ với cơ sở mã rộng lớn của chúng tôi. Vì vậy, xin vui lòng giúp đỡ bất kỳ sẽ được đánh giá cao. – user32262

+0

@user Bạn đã hỏi cùng một câu hỏi một vài lần ngay bây giờ. Chúng tôi đã trả lời họ nhiều lần. Chỉnh sửa của bạn cho câu hỏi này không thêm gì. Nó chỉ lặp lại những gì bạn đã hỏi ở trên. –

+1

Tôi xin lỗi nếu tôi yêu cầu điều tương tự. Có lẽ sự hiểu biết của tôi với con trỏ không phải là acurate. – user32262

Trả lời

9

Tất cả đều là báo cáo hợp lệ cùng bạn không coi trọng chúng vì tất cả các con trỏ không được tài trợ hoặc không trỏ đến bất kỳ vị trí bộ nhớ hợp lệ nào.

Và chúng hợp lệ vì con trỏ không phải là hằng số nhưng giá trị được trỏ bởi con trỏ là hằng số. Vì vậy, con trỏ ở đây có thể gán lại để trỏ đến một vị trí khác.

3

Các bài tập này hoàn toàn hợp lệ như tôi và những người khác đã giải thích trong các câu hỏi gần giống như gần đây của bạn.

A const char* là con trỏ tới bộ nhớ không thể sửa đổi được bằng con trỏ đó. Không có gì ở đây có thể phá vỡ điều đó. Trình biên dịch sẽ phản đối nếu bạn đã gán c4 = c1 từ đó sẽ phá vỡ const.

30

Trong tâm trí bạn vẽ một đường thẳng qua tiểu hành tinh. Bên trái là những gì đã được chỉ ra và bên phải là loại con trỏ

Ví dụ

  1. const char * const p - Con trỏ p là hằng số và do đó là những nhân vật mà p điểm - tức là không thể thay đổi cả con trỏ và nội dung cho những gì p trỏ tới
  2. const char * p - p trỏ đến các ký tự không đổi. Bạn có thể thay đổi giá trị của p và làm cho nó trỏ đến các ký tự không đổi khác nhau. Nhưng bất cứ điều gì p điểm đến, bạn không thể thay đổi nội dung.
  3. char * const p - Bạn không thể thay đổi con trỏ nhưng có thể thay đổi nội dung

và cuối cùng

  1. char * p - Tất cả mọi thứ là up for grabs

Hy vọng rằng sẽ giúp.

+0

Bạn muốn có 2 * s trong ví dụ đầu tiên? –

+0

Rất rõ ràng. Bài đăng hay. Tôi chỉ đang lùng sục tự hỏi tại sao tôi có thể thay đổi 'const char * ptr' thành một đầu vào arg, và điều này được làm rõ một cách hoàn hảo. Tôi đã hết phiếu bầu trong 40 phút nữa, vì vậy tôi sẽ ++ sau đó. – stevieb

0

Tất cả những điều này hợp lệ, dòng có vấn đề duy nhất là char * c6 = "abc";: ở đây "abc" là một chữ const để gán cho con trỏ không phải là an toàn và ít nhất phải tạo cảnh báo nếu không phải là lỗi biên dịch (Tôi đã không cố gắng biên dịch nó).

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