Câu hỏi về con trỏ và địa chỉ

Cho int x[5] = {0, 1, 2, 3, 4}. Các câu lệnh gọi hàm print3(&x[0]), print3(&x[2]), print3(&x[4]) sẽ in ra gì?

void print3(int []x) {
		int i;
		for (i = 0; i < 3; i++)
		  {
			printf("%d  ", x[i]);
		  }
               }

Em đã thử và có kết quả như sau:


Mong mọi người giải thích giúp em với ạ. Em xin cám ơn

  • List item
  • print3(&x[0]) có nghĩa là bạn đang ở địa chỉ thật sự của x[0] và từ chỗ địa chỉ đó bạn chạy vòng lặp 3 lần mỗi lần i++ nó sẽ nhích qua địa chỉ bênh cạnh => nó sẽ in ra 0 1 2
  • print3(&x[4]) tương tự bạn đang ở địa chỉ của x[4] thì bạn i++ thì nó sẽ ra khỏi phạm vi của bạn cấp phát nên nó sẽ in ra giá trị rác
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?