Poll: Kiểm tra kiến thức C - 2.10

Các bạn thảo luận đáp án nhé, bài test lấy từ http://www.indiabix.com/online-test/c-programming-test/12
10.What will be the output of the program ?
Bài này hay!

#include<stdio.h>

int main()
{
    char *p;
    p="hello";
    printf("%s\n", *&*&p);
    return 0;
}
  • A. llo
  • B. hello
  • C. ello
  • D. h

Giá trị của địa chỉ của giá trị của địa chỉ p. Để đơn giản, bạn cứ thử nhớ lại độ ưu tiên của các thao tác trên p: ((&((&p))))

Giả sử ô nhớ của pointer p đang là A190, ô nhớ của pointer p đang trỏ tới là B200 thì:

( * ( & ( * (       &p         ) ) ) )
( * ( & ( * (      A190       ) ) ) )
( * ( & ( *        A190       ) ) )
( * ( & (         "B200"      ) ) )
( * ( &           "B200"      ) )
( * (              A190        ) )
( *                A190        )
(                 "B200"       )
  • Nếu print ra dạng int, ta sẽ có địa chỉ của ô nhớ B200
  • Nếu print ra dạng string, ta sẽ có giá trị mà ô nhớ B200 đang chứa, tức là “hello”

Ghi chú:

  • &p = Địa chỉ của pointer p (không phải là địa chỉ mà pointer p đang trỏ tới)
  • *(A190) = Giá trị của ô nhớ có địa chỉ A190. Rủi thay, ô A190 là 1 pointer
  • “B200” = Giá trị của ô nhớ có địa chỉ A190. Do A190 là pointer, nên giá trị lưu trong vùng nhớ A190 là địa chỉ mà pointer đang trỏ tới, tức là địa chỉ B200.

Nếu có gì sai sót, mọi người đóng góp để mình biết nhé. Thân chào và quyết thắng.

1 Like

Mình cũng xin đóng góp ý kiến bản thân .

  • Mình thì nghĩ rằng đối với câu lệnh trên thì p dang trỏ tới vùng nhớ của p[0] . Như các bạn cũng biết p[0] có nhiều cái hay . nên nếu chúng ta xuất giá trị địa chỉ của p[0] thì nó sẽ xuất tất cả các ô nhớ còn lại .
  • Đây là code chứng minh điều trên . Các bạn có thể sửa thành p[1] nhưng lúc đó nó sẽ chỉ còn “ello” mà thôi .
#include<stdio.h>
#include <conio.h>
int main()
{
	char *p;
	p = "hello";
	printf("%s\n", *&p[0]); // *&p cũng được
	getch();
	return 0;
}

–> Kết Quả : “hello”.

Nếu Sai trong suy nghĩ mong mấy bạn bỏ qua và giúp đỡ mình .

Cảm ơn các bạn

2 Likes

Đúng rồi đó bạn @Thai_Hoc_Nguyen, p đang trỏ tới vùng nhớ p[0] (tức là dữ ‘h’).

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