C 字符指针的整数警告

C 字符指针的整数警告,c,string,pointers,char,C,String,Pointers,Char,有人能帮我理解为什么在下面两行代码中会出现“警告:从不同大小的整数转换为指针”的情况吗 所以我有一个指向字符串(char*string)的指针和一个需要存储字符串中最后一个字符地址的双指针(char**final)。。。我以为下面的代码行可以工作,但我一直得到错误。。。我怎么修理它 char last = *string; *final = (char *)last; last属于char类型。将其转换为指针意味着存储在last中的字符的数字代码将被解释为地址。因此,如果last包含A,那么

有人能帮我理解为什么在下面两行代码中会出现“警告:从不同大小的整数转换为指针”的情况吗

所以我有一个指向字符串(
char*string
)的指针和一个需要存储字符串中最后一个字符地址的双指针(
char**final
)。。。我以为下面的代码行可以工作,但我一直得到错误。。。我怎么修理它

char last = *string; 
*final = (char *)last;

last
属于
char
类型。将其转换为指针意味着存储在
last
中的字符的数字代码将被解释为地址。因此,如果
last
包含
A
,那么这将导致值
65
被解释为地址。(假定为ASCII)。编译器是智能的,表明这可能不是您想要的行为。

如果
string
是指向字符串中最后一个字符的指针,
last
是该字符的副本。因为它只是值的副本,所以它与原始字符串中的位置没有关系。要将该指针保存到
final
指向的位置,应执行以下操作:

*final = string;

要声明变量,您必须指定希望该变量是什么类型,然后指定希望调用该变量的内容。如果需要一个名为“last”的“char”类型变量,可以通过以下语法实现:

char last;
如果需要指向特定数据类型变量的指针,请添加星号符号,如下所示:

char *last;
现在您有了一个指针,可以用来指向内存中必须包含字符的位置。如果您试图在c语言中创建一个“字符串”,它只不过是一系列字符,在内存中按顺序连续排列。您可以使用char指针指向这一系列char中的第一个char,然后通过将此char指针作为输入参数来使用处理字符串的特定函数(例如strcpy或strlen)

现在谈谈你的问题。假设您创建了如下字符串:

char *str = "example";
char *last = str+strlen(str)-1;
您所做的是创建一系列字符,即

'e', 'x', 'a', 'm', 'p', 'l', 'e', '\0'
(其中“\0”是标记字符串结尾的空字符。任何处理字符串的函数都必须识别字符串的结尾)。您创建的名为“str”的字符指针指向第一个字符,即“e”。记住,指针有这个字符的地址,其余所有字符都存储在第一个字符后面的地址空间中

要访问此字符串中的特定字符,必须取消对指针“str”的引用。如果需要字符串中的第一个字符,请执行以下操作:

char first = *char;
char second = *(char+1);
这将把第一个字符保存在一个名为“first”的char类型变量中,在本例中是字母“e”。要获取第二个字符,请执行以下操作:

char first = *char;
char second = *(char+1);
实际上,您正在“读取”(取消引用)您的字符指针“str”指向内存中大小为“char”的+1步的值。在本例中,这意味着称为“second”的char类型变量现在包含(表示)字符串中的第二个字母,即“x”

如果需要字符串的大小,可以使用strlen函数。语法如下:

int length = strlen(str);
其中“str”是指向字符串中第一个字符(即“e”)的字符指针。strlen将返回字符串的长度,不包括仅标记字符串结尾的空字符“\0”。这意味着在我们的示例中,长度将等于7,因为单词“example”中有7个字母。如果你想提取这个字符串的最后一个字母,现在你所要做的就是我们以前做的,但是记住在C中索引从0开始。这意味着,如果您有一个长度为7的字符串,那么该字符串的最后一个元素将位于“索引”6。因此,要获取字符串的最后一个字符,必须执行以下操作:

char last = *(str+length-1);
或者,如果尚未将长度保存到int类型的变量,则可以这样做:

char last = *(str+strlen(str)-1);
如果需要指向字符串最后一个字符的指针,则必须初始化新的字符指针,并使其指向“str”最后一个字符所在的位置(内存地址)。按照与前面相同的逻辑,这是由原始字符串“str”的“index”6处的字符的内存地址给出的。因此,创建一个新指针,并让该指针指向该内存地址,如下所示:

char *str = "example";
char *last = str+strlen(str)-1;
请记住,您需要在文件顶部包含头文件string.h,如下所示:

#include <string.h>
#包括

您认为这些行单独起什么作用?这两种方法都不适合做你想做的事情,但我不知道如何解释为什么在不知道你认为他们做什么的情况下不这样做。
last
char
(整数),
*final
是指向
char
的指针。您正在将整数强制转换为指针。这个警告非常清楚。所以我在字符串的最后一个字符(aka string='c'),我试图让我的char*final指针存储字符串中字符'c'的地址。这种逻辑有意义吗?
*final=string哦,我明白了。。。那么,我该如何指出最后一个地址呢?