2010-05-29 33 views
6

Tôi là một sinh viên lập trình hoàn toàn mới, vì vậy hãy tha thứ cho sự thiếu hiểu biết của tôi. Trạng thái chuyển nhượng của tôi:Làm cách nào để đặt lại con trỏ của tôi thành vị trí mảng cụ thể?

Viết chương trình khai báo một mảng gồm 10 số nguyên. Viết một vòng lặp chấp nhận 10 giá trị từ bàn phím và viết một vòng lặp khác hiển thị 10 giá trị. Không sử dụng bất kỳ subscripts trong vòng hai; chỉ sử dụng con trỏ.

Đây là mã của tôi:

#include "stdafx.h" 
#include <iostream> 
using namespace std; 

int main() 
{ 
    const int NUM = 10; 
    int values[NUM]; 
    int *p = &values[0]; 
    int x; 
    for(x = 0; x < NUM; ++x, ++p) 
    { 
     cout << "Enter a value: "; 
     cin >> *p; 
    } 
    for(x = 0; x < NUM; ++x, ++p) 
    { 
     cout << *p << " "; 
    } 
    return 0; 
} 

Tôi nghĩ rằng tôi biết nơi mà vấn đề của tôi là. Sau vòng lặp đầu tiên của tôi, con trỏ của tôi có giá trị [10], nhưng tôi cần đưa nó về giá trị [0] để hiển thị chúng. Làm thế nào tôi có thể làm điều đó?

+1

này nghe có vẻ giống như C++ so với C :-) – nc3b

+1

@ nc3b: Tôi đã phát hiện ra rằng nhiều trường đại học nói rằng họ dạy C++ nhưng thực sự cho thấy C với 'cin' và' cout'. – zneak

+0

Điều đó cũng xảy ra ở trường trung học của tôi :-( – nc3b

Trả lời

7

Bạn có thể thực hiện chính xác như bạn đã làm đầu tiên khi bạn đã gán p:

p = &values[0]; 

Bên cạnh đó, các mảng đang rất giống con trỏ (mà bạn không thể thay đổi) để tĩnh phân bổ bộ nhớ. Do đó, biểu thức &values[0] sẽ đánh giá cùng một điều mà chỉ values thực hiện. Do đó,

p = &values[0]; 

cũng giống như

p = values; 
+0

Cảm ơn bạn rất nhiều! – talena6

+2

@ohtanya: Không vấn đề gì.Nếu nó hoạt động đủ tốt, bạn có thể nhấp vào dấu kiểm theo xếp hạng của câu trả lời để chấp nhận câu trả lời. :) – zneak

+1

Trái với niềm tin chung, mảng là * không * con trỏ. Trong các con trỏ ngôn ngữ chuẩn là * các giá trị l có thể sửa đổi *, trong khi các mảng thì không. Để chứng minh điểm, so sánh hai phép gán: 'p = values;' và 'values ​​= p;'. Đó là nơi mà cú pháp '& mảng [subscript]' lạ xuất phát từ đó. Nó hoạt động trong trường hợp này vì tên mảng được sử dụng như một 'giá trị r'. –

0

đã phân công của bạn nói rằng bạn phải in các số theo thứ tự? Nếu không, bạn có thể có một số thú vị bằng cách in chúng trong ngược lại:

while (p != values) 
{ 
    cout << *(--p) << " "; 
} 

(. Chỉ cần sử dụng mã này để học tập)

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