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

Khanh Nguyen viết 22:54 ngày 30/09/2018

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.

Jobs Apple Steve viết 22:52 ngày 30/09/2018

thank ban nha minh cung nghi vay

Bé tập Code viết 22:58 ngày 30/09/2018

C là ngôn ngữ pass value vào function.

Trong code của bạn, dòng b=pointer(a); trở thành b=pointer(0);

Khi bạn khai báo thế này int *pointer(int a) thì compiler tạo trong stack một biến a 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)

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

int *pointer(int a);
int main()
{
    int a=0;
    int *b=NULL;
    printf("moi ban nhap so a :");
    scanf("%d",&a);
    
    b=pointer(a);
    printf("%p \n",b);
    printf("%p \n",&a);
    return 0;
}
int *pointer(int a)
{
    int *b=&a;
    printf("%p \n",b);
    printf("%p \n",&a);
    return b;
}
viết 22:49 ngày 30/09/2018

int *pointer(int a)
{
int *b=&a;
return b;
}

Đ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ệnh printf("%d\n", *b) trong hàm main để so sánh.

Jobs Apple Steve viết 23:00 ngày 30/09/2018

the nhiwm vu cua cac ham maf co kieu nhu the nay la gi ha anh
int *a () vd the anh

Tao Không Ngu. viết 22:53 ngày 30/09/2018

This post was flagged by the community and is temporarily hidden.

cescnghia viết 22:52 ngày 30/09/2018

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ả ?

Jobs Apple Steve viết 22:52 ngày 30/09/2018

vang anh mong anh chi giao them a

cescnghia viết 22:50 ngày 30/09/2018

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ọi int* pointer(int)cũng đc mà ?

Jobs Apple Steve viết 22:58 ngày 30/09/2018

em dang thu nghiem ma anh

Bài liên quan
0