30/09/2018, 16:03

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
", *&*&p);
    return 0;
}
  • A. llo
  • B. hello
  • C. ello
  • D. h
Le Dong Thuc viết 18:19 ngày 30/09/2018

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.

Thai Hoc Nguyen viết 18:10 ngày 30/09/2018

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

Le Dong Thuc viết 18:13 ngày 30/09/2018

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

Bài liên quan
0