30/09/2018, 19:14
Cách chuyển kiểu dữ liệu của giá trị trong một vị trí ô nhớ như thế nào?
ô nhớ giá trị 2 khi chuyển sang con trỏ int lại thành 0x08070605. Thx m.n.
Bài liên quan
ô nhớ giá trị 2 khi chuyển sang con trỏ int lại thành 0x08070605. Thx m.n.
Mình chuyển giá trị 2 của con trỏ int sang hexa. Sao lại ra giá trị trong ô nhớ là 0x08070605 vậy m.n.
không hiểu ý bạn lắm, bạn có thể copy code mình chạy thử đc không? với chỗ mã quy cách in thì bạn phải để là %d chứ sao lại là %p nhỉ?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i;
char *a;
char *p;
int *q;
a=(char*)malloc(100);
p=a;
q=a;
printf(“nhap so luong phan tu vao mang:”);
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf(“nhap phan tu thu %d:”,i+1);
scanf("%d",a+i);
}
printf("%p\n",(p+1));
printf("%p\n",(q+1));
}
% đê in ra hexa bạn ạ. mình đang ko hiểu giá trị 2 của contro kiểu int lại ra mã hexa là 08070605.
vẫn không hiểu được ý bạn, bạn có thể miêu tả rõ hơn ko? mà mình chạy có lỗi chỗ ép kiểu q=a
bên mình vẫn chạy bt mà.
Mình chưa hiểu rõ ý bạn nhưng địa chỉ con trỏ kiểu int theo mình biết là nó chiếm 4 byte? không biết bạn thắc mắc là thắc mắc chỗ nào?
giá trị mình nhập ở ô nhớ thứ 2 ý. khi printf dạng hexa lại là 08070605.
q
là kiểuint
(thường là 4 bytes tùy thuộc vào compiler, OS, phần cứng), trong khia
(chứa 1 byte) là kiểuchar
, nên khi gánq = a
thì có thể xảy ra chuyển kiểu từchar *
sangint *
.printf
cuối cùng sẽ không phải là in phần tử thứ 2 của a (tứca+1
), mà in ra toàn bộ nội dung phần tử 5, 6, 7, 8 củaa
(tứca+4, a+5, a+6, a+7
). Bạn nhìn kỹ kết quả sẽ thấy.PS: Con trỏ có kiểu dữ liệu khác nhau sẽ có “bước nhảy” khác nhau khi thực hiện phép cộng trừ trên nó với một số nguyên.
ví dụ:
char *a
-a+1
“bước nhảy” sẽ là địa chỉ của biếna + 1
byte.int *b
-b+1
“bước nhảy” sẽ là địa chỉ của biếnb + 4
byte.