1、A PChar is a pointer to a null-terminated string of characters of the type Char. Each of the three character types also has a built-in pointer type:A PChar is a pointer to a null-terminated string of 8-bit characters.
A PAnsiChar is a pointer to a null-terminated string of 8-bit characters.
A PWideChar is a pointer to a null-terminated string of 16-bit characters.PChars are, with short strings, one of the original Object Pascal string types. They were created primarily as a C language and Windows API compatibility type.
2、A string represents a sequence of characters. Object Pascal supports the following predefined string types.Type Maximum length Memory required Used for
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters
WideString ~2^30 characters 4 bytes to 2GB Unicode characters; 
COM servers and interfaces
AnsiString, sometimes called the long string, is the preferred type for most purposes.
String types can be mixed in assignments and expressions; the compiler automatically performs required conversions. But strings passed by reference to a function or procedure (as var and out parameters) must be of the appropriate type. Strings can be explicitly cast to a different string type (see Typecasts).
The reserved word string functions like a generic type identifier. For example,var S: string;creates a variable S that holds a string. In the default {$H+} state, the compiler interprets string (when it appears without a bracketed number after it) as AnsiString. Use the {$H杴 directive to turn string into ShortString.
The standard function Length returns the number of characters in a string. The SetLength procedure adjusts the length of a string.
Comparison of strings is defined by the ordering of the characters in corresponding positions. Between strings of unequal length, each character in the longer string without a corresponding character in the shorter string takes on a greater-than value. For example, 揂B?is greater than 揂? that is, 'AB' > 'A' returns True. Zero-length strings hold the lowest values.You can index a string variable just as you would an array. If S is a string variable and i an integer expression, S[i] represents the 
ith character梠r, strictly speaking, the ith byte梚n S. For a ShortString or AnsiString, S[i] is of type AnsiChar; for a WideString, S[i] is of type WideChar. The statement MyString[2] := 'A'; assigns the value A to the second character of MyString. The following code uses the standard UpCase function to convert MyString to uppercase.var I: Integer;begin
  I := Length(MyString);
  while I > 0 do
  begin
    MyString[I] := UpCase(MyString[I]);
    I := I - 1;
  end;
end;Be careful indexing strings in this way, since overwriting the end of a string can cause access violations. Also, avoid passing long-string indexes as var parameters, because this results in inefficient code.
You can assign the value of a string constant梠r any other expression that returns a string梩o a variable. The length of the string changes dynamically when the assignment is made. Examples:MyString := 'Hello world!';MyString := 'Hello ' + 'world';
MyString := MyString + '!';
MyString := ' ';               { space }
MyString := '';                { empty string }