Hỏi về cách lấy địa chỉ con trỏ và mảng?
Dạ Chào mọi người.
Em là Học
Môn nay em xin hỏi về Đoạn code sau đây:
Em xin post code của em qua codepad
http://codepad.org/SJ8X4BPW
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
int n;
printf("Nhap N: ");
scanf("%d",&n);
char *c;
c = (char *) calloc(n,sizeof(char *));
// Hoanh thanh viec cap phat
for( int i= 0 ; i < n ; i++)
{
fflush(stdin);
printf("A[%d]= ",i);
scanf("%c", &c[i]); // cai nay la ta dang truy xuat den dia chi cua phan tu trong mang.
// Neu ta Truy xuat den 1 phan tu chu ko phai den nhieu n phan tu trong mang >>
// ta khong can gan dia chi cho no vi ban than no da la 1 dia chi
}
for( int i = 0 ; i < n ; i++)
{
printf("A[%d]= %4c ",i,c[i] - 32);
}
getch();
}
- Vấn đề em muốn hỏi ở đây là:
scanf("%c", &c[i]); (Dòng thứ 17 trong đoạn code trên ). (1)
Em nhập mảng con trỏ thì em cần đến cái dấu ‘&’. Đằng trước nó , nhưng khi em thay nó bằng.
scanf("%c", c[i]); (2)
thì nó lại ko thể tự truy xuat đến địa chỉ ô nhớ của mỗi phần tử , do đó em đã test như sau.
scanf("%c", c);(3)
Thì nó lại có thể tự truy cập đến ô nhớ của c[0] là thực hiện nhập phần tử cho c[0].
(Tại sao dòng (2) chúng ta ko thể như dòng (3) ? ).
Em thực sự còn hơi mơ hồ về cái này mong mọi người giúp đỡ .
Cảm ơn mọi người đã xem topic của em.
Trường hợp (3) là trường hợp đặc biệt.
c
, tương đương với phần tử đầu tiên của mảng,&c[0]
Cảm ơn anh vậy là chỉ có phần tử đầu tiên là làm như vậy được cảm ơn anh Đạt
Chỉ có phần tử đầu tiên, các phần tử sau em có thể sử dụng phép toán cộng trên con trỏ
Ví dụ ta có mảng
1234
c
trỏ tới 1c + 1
trỏ tới 2c + 2
trỏ tới 3c + 3
trỏ tới 4em thật sự yếu về cộng/ trừ 2 con trỏ anh co link học thì post cho em nhé ! cảm ơn anh
Tiếc là anh chỉ link dạy con trỏ trong C++, anh chưa làm cho C. Nhưng em có thể xem qua một số bài con trỏ mà diễn đàn đang có.
Không Sao Đâu anh em cũng có học sơ qua C++ anh cứ post cho em nhé
Em vào link này nhé:
http://portal.daynhauhoc.com/p/hoc-lap-trinh-ngon-ngu-cpp/