30/09/2018, 20:47
Con trỏ trong hàm trong c
mình có đoạn code như sau
#include <stdio.h>
#include <stdlib.h>
int *pointer(int a);
int main()
{
int a=0;
printf("moi ban nhap so a :");
scanf("%d",&a);
int *b=NULL;
b=pointer(a);
printf("%d",b);
return 0;
}
int *pointer(int a)
{
int *b=&a;
return b;
}
chỗ cái hàm ý mọi người nó có nhiệm vụ là trả về con trỏ cảu biến gọi vào nhưng theo nguyên tắc gọi hàm của c là nó chỉ tạo một bản sao thôi à để gửi vào hàm thôi à vậy cái giá trị con trỏ nó trả về là giá trị của biến tạm thời hay là giá trị của biến khi mình gửi vào
Bài liên quan
Giá trị trả về là địa chỉ của biến tạm thời nhé bạn. Bạn có thể sử dụng tính năng debugging trong các IDE để dễ dàng kiểm tra.
thank ban nha minh cung nghi vay
C là ngôn ngữ pass value vào function.
Trong code của bạn, dòng
b=pointer(a);
trở thànhb=pointer(0);
Khi bạn khai báo thế này
int *pointer(int a)
thì compiler tạo trong stack một biếna
và bạn đã trả về địa chỉ của biến này.Bạn có thể in thêm ra để thấy sự khác biệt (nên dùng
%p
)Đoạn này rơi vào trường hợp dangling pointer rồi, a là pass by value nên khi hàm
int* pointer(int a)
chạy sẽ tạo một biến tên a khác trong stack có giá trị là giá trị a trong main, sau khi hàm này chạy xong thì biến này sẽ bị hủy, biến b cũng tương tự, nên return b sẽ trỏ tới 1 ô nhớ ngẫu nhiên nào đó (do b đã bị hủy), bạn có thể thêm lệnhprintf("%d\n", *b)
trong hàm main để so sánh.the nhiwm vu cua cac ham maf co kieu nhu the nay la gi ha anh
int *a () vd the anh
This post was flagged by the community and is temporarily hidden.
Hàm
int* pointer(int a)
có nhiệm vụ trả về 1 con trỏ trỏ đến a ? Đây là câu hỏi bạn muốn hỏi hả ?vang anh mong anh chi giao them a
Mình ko hiểu bạn muốn làm gì trong đoạn code đó, trong main() bạn có thể:
int* b = &a ;
mà ko cần cái hàm gọiint* pointer(int)
cũng đc mà ?em dang thu nghiem ma anh