C语言,在if语句块里给int*指针变量赋值,出了if语句块值就不见了
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int evalRPN(char** tokens, int tokensLen ) {
// write code here
// 逐个压栈。当遇到操作符时,取栈中前两个数做操作数,删除两个操作数,然后得到的结果压入栈中
// 创建栈
int *num = (int *)malloc(sizeof(int)*tokensLen);
// 栈元素记录数
int counter = 0;
// 取字符压栈
for(int i=0;i<tokensLen;i++)
{
// 判断是操作数还是操作符
// 取每一个字符串的第0个字符
char c_now = *(*(tokens+i));
if(c_now=='+')
{
// +操作
}
else if(c_now=='-')
{
// -操作
}
else if(c_now=='*')
{
// *操作
}
else if(c_now=='/')
{
// /操作
}
else
{
// 转为数字压栈
char *s = *(tokens+i);
*(num + counter) = strtol(s, NULL, 10);
printf("%d\n", *(num+counter));
counter ++;
}
}
for(int i=0;i<counter;i++)
{
printf("%d, ", *(num+counter));
}
printf(" \n");
free(num);
return 0;
}
int main()
{
int size_ss = 5;
int size_s = 1;
char **s = (char **)malloc(sizeof(char *)*size_ss*size_s);
*(s) = "2";
*(s+1) = "1";
*(s+2) = "+";
*(s+3) = "4";
*(s+4) = "*";
evalRPN(s, size_ss);
return 0;
}
下面是结果
2
1
4
0, 0, 0,
求解答。
数据的值还在,只是程序后的那个打印程序写的有问题。count现在的值为3,*(num+3)没有赋值,所以一直为零。希望对你有帮助。修改如下所示:
for(int i=0;i<counter;i++)
{
printf("%d, ", *(num+i));
}
4、 下列条件语句中,功能与其他语句不同的是( )
A: if(a) printf("%d\n",x); else printf("%d\n",y);
B: if(a==0) printf("%d\n",y); else printf("%d\n",x);
C: if (a!=0) printf("%d\n",x); else printf("%d\n",y);
D: if(a==0) printf("%d\n",x); else printf("%d\n",y);
🙈同学们觉得答案是什么呢
🙉答案是 D 啦~
🙊 如果同学们有疑惑,且听我细细分析呀
本题主要考点:“`if条件语句的理解和应用”
💡解题关键:
➡️ 让我们一起来解题吧~
假设A
选项为正确的,即可知:
-1️⃣ a为非0数即为真
,就打印x
的值
-2️⃣a为0即为假
时,就打印y
的值
✨综上:
D
选项是四个选项中与众不同的,所以这也是为什么选D
啦~