2013-01-18 173 views
1

我有一个接收指向字符串的指针的函数。 现在我想复制这个指针,所以我可以用一个指针在字符串上运行,并有另一个指针保存字符串的开头。我希望我的问题很清楚,我不想创建一个指向指针的指针(它指向第一个指针所指向的位置并随之改变),我想要一个指向第一个指针指向的地址的指针。使用另一个指针指向地址的指针C

我尝试了许多不同的方法,但没有一次成功,这是我最新的尝试,我不断收到 “初始化将指针从整数,未作类型转换”

int move_chars (char *str, int start, int end, int dist){ 
    int strsize = end - start + 1; 
    char *p = *str; 
+3

'的char * p值= STR;''作为str'是一个'的char *' '* str'是一个'char'。 – hmjd

回答

5

使用

char *p = str; 

声明一个指向char的指针并用另一个char指针的值初始化它。

+0

感谢您的回答不能相信我没有尝试过!如果我想向前移动指针,我应该使用p ++还是* p ++?似乎找不到差异// – user1108310

+0

使用'p ++'向前移动指针。 '* p ++'可以用来合并赋值和指针增量,通常在一个循环中。例如'while(* src!='\ 0')* dest ++ = * srC++;'作为'strcpy'实现。 – simonc

7

由于pchar *型和strchar *类型的,你只需要做:

char *p = str; 

为了p指向同一个内存位置的str

您的代码:

char *p = *str; 

尝试在存储位置是str点复制到p第一char的价值,因为p期待另一个存储位置,而不是一个char,你会得到一个错误。

你的错误说“初始化使得整型指针没有强制转换”。这是告诉你发生了什么事情:编译器认为你手动指向p到一个特定的内存位置,使用char*str返回的值作为一个整数。这在技术上是可行的,但是您需要手动将整数转换为指针,这样就可以清楚地表明您正在按照您的要求进行操作,而不是像您的情况那样的错误。

1
char *p = str 

这将声明一个指针字符并使得p指向的存储器位置STR

+0

感谢您的回答!但是为什么当你在提示的答案后尝试* str = p rihgt时,我又会得到一个错误? – user1108310

+0

@ user1108310:你在做什么?它应该是char * p = str; –

+0

首先我做char * p = str,而不是p ++,现在我想把str带到p点,所以我应该做* str = p对吗?但那不起作用 – user1108310