01/10/2018, 10:20

Hỏi về dấu * trong hàm

mong mn thông cảm e không chuyên ngành tin e học bên điện.
Mn cho e hỏi dấu *s khác gì với việc ta chỉ dùng s trong đoạn code sau:
int Step_Speed (unsigned int t, unsigned char chieu,int *s)
{

if (t==0) return 0;

if(chieu==1)
{
 	stept(*s);
	*s=*s+1;
	if (*s>3) *s=0;
	
}
if(chieu==2)
{
 	stepn(*s);
	*s=*s+1;
	if (*s>3) *s=0;
}
Delay_ms(t);
return 1;

}

Dark.Hades viết 12:34 ngày 01/10/2018

*s=*s+1;

s là con trỏ, *s là giá trị của nó
vd: int a = 5; // ở vị trí ô nhớ thứ 10
int *s = a; // *s mới bằng 5, s = 10

Dòng này mang nghĩa: thay đổi giá trị của s cả trong và ngoài hàm
Nếu bạn không có * thì nó sẽ thay đổi vị trí mà thằng s đang trỏ tới, vị trí này nằm ngay sau vị trí cũ và mang giá trị khác *s

明玉 viết 12:28 ngày 01/10/2018

int *s nghĩa là s là var kiểu int* (1 con trỏ, trỏ đến vùng memory int).
*s nghĩa là khử tham chiếu - dereference (truy cập vào vùng nhớ mà con trỏ s trỏ đến)

Phan Dai viết 12:26 ngày 01/10/2018

*s có nghĩa là một địa chỉ thuộc về bộ nhớ động nó sẽ chỉ đến nơi có chứa s !
s thì là thông tin về về dữ liệu thuộc về bộ nhớ tĩnh.

rogp10 viết 12:29 ngày 01/10/2018

Bạn nên xem con trỏ để hiểu tường tận, nhưng nói ngắn gọn là trong C sử dụng con trỏ để truyền tham biến, hay là để thay đổi biến mà caller truyền vào.

Bài liên quan
0