Tôi đang cố gắng tìm hiểu con trỏ trong C, và đã đi qua các khái niệm. Tôi đi qua câu hỏi trong phòng thí nghiệm này, và cố gắng viết một giải pháp cho nó.Con trỏ trỏ đến một điểm ký tự trong C là gì?
/* p1.c
Write a short C program that declares and initializes (to any value you like) a
double, an int, and a char. Next declare and initialize a pointer to each of
the three variables. Your program should then print the address of, and value
stored in, and the memory size (in bytes) of each of the six variables.
Use the “0x%x” formatting specifier to print addresses in hexadecimal. You
should see addresses that look something like this: "0xbfe55918". The initial
characters "0x" tell you that hexadecimal notation is being used; the remainder
of the digits give the address itself.
Use the sizeof operator to determine the memory size allocated for each
variable.
*/
Tuy nhiên, tôi có hai loại chính của các lỗi khi tôi biên soạn theo chương trình
định dạng placeholders của tôi cho báo cáo kết quả printf dường như là tất cả các sai. Tôi đã ấn tượng rằng địa chỉ bộ nhớ có thể được in bằng% x hoặc% p. Nhưng trong chương trình của tôi, cả hai cảnh báo trình biên dịch được tạo ra. Tôi không hiểu - tại sao trong một số chương trình trước đây của tôi,% p làm việc mà không có bất kỳ cảnh báo nào và tại sao cả% x và% p không hoạt động ở đây. Ai đó có thể vui lòng giúp tôi về việc trình giữ chỗ nào hoạt động với loại dữ liệu nào?
Vấn đề chính khác là gán một con trỏ cho một biến ký tự. Khi tôi chạy chương trình này, tôi nhận được lỗi phân đoạn trong tuyên bố printf thứ ba của chương trình. Tôi không chắc chắn lý do tại sao nó là Somali
Nếu tôi đúng, một tuyên bố như this-
char array[]="Hello World!"
và char *ptr=array
đặt con trỏ biến nhân vật ptr
để trỏ đến phần tử đầu tiên của biến mảng array
. Vì vậy, lý tưởng, *ptr
sẽ cho biết 'H'
, *(ptr+1)
sẽ cho biết 'e'
v.v.
Theo cùng một logic, nếu tôi có một biến ký tự var3
với char 'A'
, thì làm cách nào để tạo biến con trỏ ptr3
trỏ đến nó?
Dưới đây là chương trình tôi wrote-
#include<stdio.h>
int main()
{
int var1=10;
double var2=3.1;
char var3='A';
int *ptr1=&var1;
double *ptr2=&var2;
char *ptr3=&var3;
printf("\n Address of integer variable var1: %x\t, value stored in it is:%d\n", &var1, var1);
printf("\n Address of double variable var2: %x\t, value stored in it is:%f\n", &var2, var2);
printf("\n Address of character variable var3: %x\t, value stored in it is:%s\n", &var3, var3);
printf("\n Address of pointer variable ptr1: %x\t, value stored in it is:%d\n", ptr1, *ptr1);
printf("\n Address of pointer variable ptr2: %x\t, value stored in it is:%f\n", ptr2, *ptr2);
printf("\n Address of pointer variable ptr3: %x\t, value stored in it is:%s\n", ptr3, *ptr3);
printf("\n Memory allocated for variable var1 is: %i bytes\n", sizeof(var1));
printf("\n Memory allocated for variable var2 is: %i bytes\n", sizeof(var2));
printf("\n Memory allocated for variable var3 is: %i bytes\n", sizeof(var3));
printf("\n Memory allocated for pointer variable ptr1 is: %i bytes\n", (void *)(sizeof(ptr1)));
return 0;
}
Bất kỳ trợ giúp sẽ được nhiều nhiều đánh giá cao. Cảm ơn bạn.
'% c' là dành cho ký tự. '% s' là dành cho các chuỗi được kết thúc bằng null. Bạn có một char. – user2357112
"Con trỏ trỏ đến điểm ký tự trong C là gì?" *Một nhân vật***. –
Tại sao bạn đúc 'sizeof (ptr1)' thành 'void *'? – user2357112