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.
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ự