C - 操纵指针

时间:2016-02-20 19:32:17

标签: c pointers

我在下面有一个函数的开头部分。我不必经常用C编码所以我非常生疏。我有一个名为arguments的参数。论证将作为" 10000 a"例如。我试图使用临时指针来获取第二个参数。我的问题是,当我添加它或甚至只是尝试设置它时,临时似乎没有移动或改变。如果我要运行这个

,下面是打印语句的结果

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

temp之前加1:61fe84

循环前的

temp: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++;
  }

2 个答案:

答案 0 :(得分:1)

您没有看到任何更改,因为您打印的是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++;
  }

答案 1 :(得分:0)

试试这个:

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。