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