30/09/2018, 16:25

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.

Nguyễn Minh Dũng viết 18:38 ngày 30/09/2018

Trường hợp (3) là trường hợp đặc biệt.

  • tên của mảng, ở đây là c, tương đương với phần tử đầu tiên của mảng, &c[0]
Thai Hoc Nguyen viết 18:40 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:39 ngày 30/09/2018

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 1
  • c + 1 trỏ tới 2
  • c + 2 trỏ tới 3
  • c + 3 trỏ tới 4
Thai Hoc Nguyen viết 18:41 ngày 30/09/2018

em 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

Nguyễn Minh Dũng viết 18:37 ngày 30/09/2018

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ó.

Thai Hoc Nguyen viết 18:37 ngày 30/09/2018

Không Sao Đâu anh em cũng có học sơ qua C++ anh cứ post cho em nhé

Nguyễn Minh Dũng viết 18:28 ngày 30/09/2018

Em vào link này nhé:

http://portal.daynhauhoc.com/p/hoc-lap-trinh-ngon-ngu-cpp/

Bài liên quan
0