01/10/2018, 15:21

Tại sao biến ptrBook là biến con trỏ mà khi scanf lại dùng toán tử "&" và khi printf ra thì lại k dùng "*"?

#include<stdio.h>
#include<stdlib.h>

struct book
{
char name[30];
int code;
double price;
};

void main()
{
int i;
struct book programmingBook;
printf("Nhap ten sach: ");
gets(programmingBook.name);
printf(“Nhap ma sach: “);
scanf(”%d”,&programmingBook.code);
printf(“Nhap gia sach: “);fflush(stdin);
scanf(”%ld”,&programmingBook.price);
struct book arrayStruct[3];
// struct book *ptrBook;

struct book *ptrBook= (struct book *) malloc(sizeof(struct book));
ptrBook=&arrayStruct;
printf("
Vong for: %p 
%p",&ptrBook,&arrayStruct);
for(i=0;i<3;i++)
{
	printf("Nhap ten sach: ");fflush(stdin);
	gets(ptrBook[i].name);
	printf("Nhap ma sach: ");
	scanf("%d",&ptrBook[i].code);
	printf("Nhap gia sach: ");
	scanf("%ld",&ptrBook[i].price);
}


for(i=0;i<3;i++)
{
	printf("
%s",ptrBook[i].name);
	printf("	%d",ptrBook[i].code);
	printf("	%ld",ptrBook[i].price);
}

}

Nguyễn Tấn Trung viết 17:37 ngày 01/10/2018

rõ ràng ptrBook là biến con trỏ mà sao khi scanf lại dùng toán tử “&” và khi printf ra thì lại k dùng “*” vậy m.n

Quân viết 17:22 ngày 01/10/2018

scanf cần phải gán dữ liệu, nếu không truyền vào 1 con trỏ thì sẽ chỉ là pass by value nên k thể gán dữ liệu vào biến được, ptrBook là con trỏ, nhưng các phần tử của nó lại k phải là con trỏ. Cụ thể ptrBook[i].code k phải là con trỏ.
prinf là print value của biến, mọi biến đều có value, kể cả con trỏ (value của con trỏ là địa chỉ mà nó trỏ tới), bạn thử viết code sau, run và tự đưa ra kết luận

#include <iostream>
#include <string>
#include <cstdio>

int main()
{
  int x = 1;
  int *p = &x;
  printf("x: %d\n", x);
  printf("p: %d\n", p);
  printf("*p: %d", *p);
}
rogp10 viết 17:26 ngày 01/10/2018

rõ ràng ptrBook là biến con trỏ mà sao khi scanf lại dùng toán tử “&”

Toán tử & trong câu scanf không đặt lên con trỏ nhé bạn, nó tiếp nhận cả ptrBook[i].name.

明玉 viết 17:31 ngày 01/10/2018

Bởi vì bạn không biết cách dùng 2 function đó, bạn nên đọc kĩ tài liệu về 2 function printf và scanf. Chứ nếu trả lời cho bạn thì một là dài hai là sợ bạn không hiểu bản chất.

Bài liên quan
0