C指针差异Char Int

时间:2016-11-03 12:31:57

标签: c pointers

代码bellow工作,因为它需要工作。

  void TstPointer(int *Pointer)
    {
        *Pointer = 3;   
    }

    int main()
    {
        int number = 1;
        int *ptr  = &number;

        TstPointer(ptr);

        printf("%d\n", number);
    }

但是当我将类型切换为char时它不起作用。

void TstPointer(char *Pointer)
{
    *Pointer = "Hell1"; 
}

int main()
{
    char *Hello  = "Hello";
    TstPointer(Hello);
    printf("%s\n", Hello);
}

警告:赋值在没有强制转换的情况下从指针生成整数[-Wint-conversion]   * Pointer =“Hell1”;

3 个答案:

答案 0 :(得分:0)

在执行*Pointer = "Hell1";时,您的编译器会警告您。您选择忽略可能调用undefined behavior的那些。

通常,要复制到指针,请使用strcpy(),但在这种情况下,这会导致问题,因为Pointer指向字符串文字 ;不允许改变。

在尝试将写入该内存位置之前,您需要确保内存可写。使用内存分配器函数,或者创建一个数组并使指针指向数组的开头。

答案 1 :(得分:0)

TstPointer方法中,当您*Pointer = "Hell1";时,您正在生成警告。

这是因为,如果Pointer是char指针,则*Pointer是char变量。你正在为一个错误的char变量赋一个字符串常量。

要解决这个问题,我认为你应该在函数参数中使用双指针作为传递main中的地址(指针)!

编辑:

您收到警告是因为当您为变量(通常为char指针或数组)分配字符串常量时,该变量会存储字符串常量开头的地址。现在,当左值不是字符指针类型,但只是一个char变量时,会发生一些隐式转换,将“地址”分配(拟合)到普通的char变量中,而该变量又会发出警告。但是,我们知道char无法容纳内存地址,因此打印时通常会导致段错误!

答案 2 :(得分:0)

Hello的引用传递给您的方法(&Hello),就像使用int一样 -

int *ptr = &number; TstPointer(ptr);