C指针差分字符Int
下面的代码按需要工作C指针差分字符Int,c,pointers,C,Pointers,下面的代码按需要工作 void TstPointer(int *Pointer) { *Pointer = 3; } int main() { int number = 1; int *ptr = &number; TstPointer(ptr); printf("%d\n", number); } 但是当我将类型切换到char时,它就不起作用了 v
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转换]
*指针=“Hell1” 在执行
*Pointer=“Hell1”代码>编译器警告您。您选择忽略可能调用的
通常,要复制到指针,请使用strcpy()
,但在这种情况下,这会导致问题,因为指针
指向不允许更改的字符串文本
在尝试写入该内存位置之前,需要确保该内存是可写的。使用内存分配器函数,或者创建一个数组并使指针指向数组的开头。在TstPointer
方法中,当您执行*pointer=“Hell1”代码>,您正在生成警告
这是因为,如果指针
是字符指针,那么*指针
就是字符变量。你给一个char变量分配了一个字符串常量,这是错误的
为了解决这个问题,我认为应该在函数参数中使用双指针作为main
中(指针的)传递地址
编辑:
您之所以会收到警告,是因为当您将字符串常量分配给变量(通常是字符指针或数组)时,该变量存储字符串常量开头的地址。现在,当左值不是char指针类型,而只是一个char变量时,会发生一些隐式转换,将“address”赋值(fit)为一个普通的char变量,从而发出警告。但是,我们知道char
无法容纳内存地址,因此在打印时通常会导致SEGFULT 将Hello
的引用传递给您的方法(&Hello
),就像使用int-
int*ptr=&number;
TstPointer(ptr)
'H'
是一个字符(char
),“Hell1”
是一个字符串(char
)请在初级C编程书中学习指针和字符串是如何工作的。这或strcpy(指针,“Hell1”)@skrtbhtngr应为'char**',但参数的类型为'char*'void TstPointer(char**Pointer),在主参数中,TstPointer(&Hello)代码>使用strcpy()
是不安全的,因为它会覆盖main()
中的“Hello”
。@Turtle这就是我要做的。覆盖main()中的变量(void TstPointer(char**Pointer){*Pointer=“Hello”}int main(){char*Hello=“Hello World”TstPointer(&Hello);printf(“%s\n”,Hello);}
所以这里我是如何根据你们的答案来解决这个问题的!