30/09/2018, 16:26

Hỏi về con trỏ và cách thức lấy địa chỉ (tiếp theo)?

Dạ chào mọi người.
Em là Học .
lần trước em có hỏi về con trỏ và cách lấy địa chỉ cũng như là trường hơp đặc biệt của phần tử đầu hôm nay em tự code 1 đoạn code là có chỗ khá khó hiểu . Mong mọi người giúp đỡ em .

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10

char* sosanh(char *x,char *y) 
{
	printf("
Gia Tri Tai o nho x %s",x);
	printf("
Dia Chi Cua x %p",&x);
	printf("
Mien Gia Tri Cua str1 ma x dang o do: %p ",x);

	if( strcmp(x,y) > 0 )
	{
		return x;
	}
	return y;
}
void main()
{
	char str1[MAX];
	char str2[MAX];
	char *temp;
	printf("Nhap Chuoi Str1: ");
	gets(str1);
	printf("Nhap Chuoi Str2: ");
	gets(str2);
	printf("
Dia Chi Cua str1 %p",str1);
	printf("
Dia Chi Cua str1 %p",&str1[0]);
	// Ta So Sanh 2 Chuoi
	temp = sosanh(str1,str2);
	strupr(temp);
	printf("
");
	puts(temp);
	printf("
");
	puts(str1);
	printf("
");
	puts(str2);
	getch();
}
  • Vấn đề em muốn hỏi ở đây là .
printf("
Gia Tri Tai o nho x %s",x); // (1)

Nếu ta ghi thế này nó sẽ xuất cả chuỗi luôn mặc dù theo bản thân em nghĩ rằng nó đang truy đến địa chỉ x[0]; nhưng nó lại xuất hết.

và sau đó, em đổi lại

printf("
Gia Tri Tai o nho x %c",x); // (2)

Nó liền xuất hiện 1 cái ký tự không phải trong str1 và str2 ?

printf("
Gia Tri Tai o nho x %c",x[0]); // (3)

Thì đúng là nó chỉ xuất 1 phần tử *x[0].

Mong mọi người giúp em hiểu hơn về con trỏ.

Cảm ơn mọi người đã đọc topic của em.

Minh Hoàng viết 18:30 ngày 30/09/2018

printf("\nGia Tri Tai o nho x %c",x); // (2)
Nó liền xuất hiện 1 cái ký tự không phải trong str1 và str2 ?

x chứa địa chỉ, vì mình chuyền vào hàm là một con trỏ, không phải giá trị. địa chỉ của x sẽ chuyển thành dạng int và sau phép mod nó sẽ ra kí tự char=> lý do vì sao không ra kí tự có trong 2 chuỗi. Bạn sửa lại thành (*x) là được.
còn tại sao x[0] ổn. là vì x[0] là bạn đã lấy giá trị tại ô x[0] được trỏ tới. bạn xem cách truyền mảng vào hàm sẽ thấy sự tương tự

Bài liên quan
0