Return giá trị của con trỏ trong một hàm trong C

Em có câu này mọi người thử thảo luận, đoán xem kết quả sẽ in ra giá trị gì ạ.

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

int function (int *val)
{
    return *(val)++;
}
int main()
{
    int a = 4;
    int b = 3;

    b = function( &a );

    printf ("%d\n%d\n" , a, b);
    return 0;
}

4 4.
Khi gọi hàm function thì val sẽ trỏ tới địa chỉ của biến a
*(val)++ : do ++ có độ ưu tiên cao hơn * nên thứ tự sẽ là *(val++) nhưng do val++ thì sau khi thực hiện return thì val trỏ tới ô nhớ sau a, nên giá trị trả về của hàm function vẫn là giá trị của a (*val) là 4 => b = 4.
Giá trị a thì vẫn không đổi tại sau hàm val++ thì thằng val trỏ đến ô nhớ sau a thôi chứ không ảnh hưởng a
Nếu test thử (*val)++ thì bạn sẽ thấy là b = 4 và a = 5 tại toán tử ++ thực hiên sau nên hàm function trả về giá trị của a (*a) và (*val)++ : giá trị a tăng sau lệnh return.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?