C-操作指针

C-操作指针,c,pointers,C,Pointers,下面是函数的开头部分。我不必经常用C语言编写代码,所以我很生疏。我有一个名为arguments的参数。例如,参数将以“10000 a”的形式出现。我试图使用一个临时指针来获取第二个参数。我的问题是,当我添加到temp时,甚至只是尝试设置它时,temp似乎根本不会移动或更改。下面是打印语句的结果,如果我要运行这个 参数地址:61fea4,ifNum的值:1 添加前温度1:61fe84 循环前温度:61fe84 回路后温度:61fe84 我做错了什么?为什么设置为temp时,它与参数不一样 int

下面是函数的开头部分。我不必经常用C语言编写代码,所以我很生疏。我有一个名为arguments的参数。例如,参数将以“10000 a”的形式出现。我试图使用一个临时指针来获取第二个参数。我的问题是,当我添加到temp时,甚至只是尝试设置它时,temp似乎根本不会移动或更改。下面是打印语句的结果,如果我要运行这个

参数地址:61fea4,ifNum的值:1

添加前温度1:61fe84

循环前温度:61fe84

回路后温度:61fe84

我做错了什么?为什么设置为temp时,它与参数不一样

int mem_set(Cmd *cp, char *arguments){
    char *p;
    char *temp;

  int ifNum = sscanf(arguments,"%x",&p);
  printf(" arguments address : %x and value of ifNum: %d\n",&arguments, ifNum);
  temp = &arguments;
  printf(" temp before add 1 : %x\n",&temp);
  temp = &arguments + 1;
  printf(" temp before loop : %x\n",&temp);
  while(*temp != ' '){
    temp++;
  }

您没有看到任何更改,因为您正在打印
temp
变量的地址。
使用运算符
&
可以得到变量的地址,而不是它的值。
无论如何,您的错误似乎是您认为要使用指针,您必须始终使用
&
运算符作为其前缀。
您指定一个变量是一个指针,只是将它声明为
int*p然后您只需使用它。现在,要使指向另一个指针的指针相等,只需将其赋值为
int*p=p1
您的代码将是:

int mem_set(Cmd *cp, char *arguments){
    char p[100];    //You need an array here because you are storing data
    char *temp;

  int ifNum = sscanf(arguments,"%x",p);
  printf(" arguments address : %x and value of ifNum: %d\n",arguments, ifNum);
  temp = arguments;
  printf(" temp before add 1 : %x\n",temp);
  temp = arguments + 1;
  printf(" temp before loop : %x\n",temp);
  while(*temp != ' '){
    temp++;
  }
试试这个:

int mem_set(Cmd *cp, char *arguments){
    int p;
    char *temp;

    // Need to store hex value in an int so we need a pointer to an int
    int ifNum = sscanf(arguments, "%x", &p);
    printf(" arguments address : %p and value of ifNum: %d\n", arguments, ifNum);
    // We want a temporary pointer that points to the same memory as arguments
    temp = arguments;
    printf(" temp before loop : %p\n", temp);
    // Find the end of the hex value
    while (*temp != ' ') {
        temp++;
    }
}

如果没有你的评论,很难猜测你在这里想做什么。但是,这段代码至少可以让您捕获参数开头的十六进制值,并向您展示如何初始化和操作temp.

应该是
printf(“添加1之前的temp:%p\n”,temp)(不带符号)。您正在打印的是指针的地址,它不会更改。
sscanf(参数,“%x”,&p)导致未定义的行为。
%x
说明符扫描一个
无符号int
,但您没有提供无符号int变量的地址。我没有使用您的代码行作为行,但您上面的描述帮助我理解了使用&运算符和不使用的区别。我很困惑,指针的地址和指针的值(地址)是同一件事。谢谢不客气。如果这澄清了您的问题,请接受答案以结束问题。还有一点,你理解了
char*p
charp[100]
的变化吗?指针不为有效数据分配任何内存,只是一个保存地址的变量。但是,如果使用sscanf存储某些内容,则必须初始化指向有效地址的指针或将其声明为有效变量。