C 我第一个节目的几个小问题
所以我是c的新手,我的第一个课程有几个问题。我写了一个程序,返回两个数字的和、差、积、除和提醒C 我第一个节目的几个小问题,c,C,所以我是c的新手,我的第一个课程有几个问题。我写了一个程序,返回两个数字的和、差、积、除和提醒 #include <stdio.h> int main(void) { int a, b, c, d, f, h, g; c = a + b; d = a - b; f = a * b; h = a / b; g = a % b; printf("Enter two numbers:"); scanf("%d %d\n",&a,&b);
#include <stdio.h>
int main(void) {
int a, b, c, d, f, h, g;
c = a + b;
d = a - b;
f = a * b;
h = a / b;
g = a % b;
printf("Enter two numbers:");
scanf("%d %d\n",&a,&b);
printf("%d\n",c);
printf("%d\n",d);
printf("%d\n",f);
if (b != 0 ) {
printf("%d\n",h);
printf("%d\n",g);
}
}
如果不是我写的,编译器会告诉我参数是int*但参数的类型是int。什么是int*
我还注意到,如果我没有,但scanf编译器将显示仍然是数字,这是怎么回事
32766
-32766
0
0
0
程序将按照任务的编写顺序执行任务 在使用a和b进行计算之前,只需询问它们的值
#include <stdio.h>
int main(void) {
int a, b, c, d, f, h, g;
printf("Enter two numbers:");
scanf("%d %d\n",&a,&b);
c = a + b;
d = a - b;
f = a * b;
h = a / b;
g = a % b;
printf("%d\n",c);
printf("%d\n",d);
printf("%d\n",f);
if (b != 0 ) {
printf("%d\n",h);
printf("%d\n",g);
}
}
在内存中创建一个整数变量,n是它的引用名。
您可以使用&n查找存储该整数的内存地址
创建指向内存位置的指针,指针名称为n。它不创建整数变量
因此,您可以:
int a;
int *p;
p=&a; /* Set pointer to be the address of the variable a in memory */
a = 5; /* Set a value for a */
printf("a = %d\n", a); /* show a */
printf("a = %d\n", *p); /* Show the contents at address p */
printf("p = %p\n", p); /* show p */
printf("p = %p\n", &a); /* show the memory address where a is stored */
程序将按照任务的编写顺序执行任务 在使用a和b进行计算之前,只需询问它们的值
#include <stdio.h>
int main(void) {
int a, b, c, d, f, h, g;
printf("Enter two numbers:");
scanf("%d %d\n",&a,&b);
c = a + b;
d = a - b;
f = a * b;
h = a / b;
g = a % b;
printf("%d\n",c);
printf("%d\n",d);
printf("%d\n",f);
if (b != 0 ) {
printf("%d\n",h);
printf("%d\n",g);
}
}
在内存中创建一个整数变量,n是它的引用名。
您可以使用&n查找存储该整数的内存地址
创建指向内存位置的指针,指针名称为n。它不创建整数变量
因此,您可以:
int a;
int *p;
p=&a; /* Set pointer to be the address of the variable a in memory */
a = 5; /* Set a value for a */
printf("a = %d\n", a); /* show a */
printf("a = %d\n", *p); /* Show the contents at address p */
printf("p = %p\n", p); /* show p */
printf("p = %p\n", &a); /* show the memory address where a is stored */
请阅读指针C是一种指针语言
&表示存储中数据类型的地址
*表示存储中数据类型的值
这方面的一个很好的例子是这段代码:
double x, *y;
x = 5.0;
y = &x;
*y = -3.0;
现在x的值是-3.0,因为y是x的地址,*y改变了x的地址值。请阅读指针C是指针语言
&表示存储中数据类型的地址
*表示存储中数据类型的值
这方面的一个很好的例子是这段代码:
double x, *y;
x = 5.0;
y = &x;
*y = -3.0;
现在x的值为-3.0,因为y是x的地址,*y改变了x的地址值。因此出于某种原因,编译器显示第一句话,输入两个数字,然后什么也不做: printf…:将消息打印到屏幕上 scanf…:将停止程序并等待您的输入。这意味着您 应分别输入a和b的值 &:它表示变量a或b的地址,因为您的程序将在内存中存储数据,这意味着您需要在内存中指定存储a和b值的地址。 如果不使用&将生成此错误:参数为int*但参数的类型为int。这是因为'a'是变量的值,它的类型为int,但'&a'是变量的地址,它的类型为int更多关于它的信息,当您使用c中的指针时,您可以检查这一点。你需要知道的是,scanf将采用&a而不是a 如果不使用scanf,为什么会得到这些随机值?
它们被称为垃圾值更多的是关于它的,因此出于某种原因,编译器显示第一句话,输入两个数字,然后什么也不做: printf…:将消息打印到屏幕上 scanf…:将停止程序并等待您的输入。这意味着您 应分别输入a和b的值 &:它表示变量a或b的地址,因为您的程序将在内存中存储数据,这意味着您需要在内存中指定存储a和b值的地址。 如果不使用&将生成此错误:参数为int*但参数的类型为int。这是因为'a'是变量的值,它的类型为int,但'&a'是变量的地址,它的类型为int更多关于它的信息,当您使用c中的指针时,您可以检查这一点。你需要知道的是,scanf将采用&a而不是a 如果不使用scanf,为什么会得到这些随机值?
它们被称为垃圾值,关于它的更多信息H应该是float,您应该强制转换division@AlbertoSinigagliaint h在这里可以表示整除。如果需要浮点商,则使用双重数学和不强制转换更好。双H=1.0*a/b;。强制转换倾向于隐藏问题,double是C的默认FP类型。它是这样的:如果b!=0{为true,则此:h=a/b;将导致程序崩溃,因为除以0H应为float,并且应强制转换division@AlbertoSinigagliaint h在这里可以用来表示整数除法。如果需要浮点商,则使用双精度数学和不强制转换更好。双精度h=1.0*a/b;。强制转换倾向于隐藏问题,double是C的默认FP类型。它是这样的:如果b!=0{为真,那么:h=a/b;将导致程序崩溃,因为除以0&a意味着a的位置。您告诉scanf在哪里可以找到a,以便它可以写入a。另外,int*表示指向int的指针。如果变量是i类型的
nt*,它可以将位置保存为int。因此,基本上,您可以编写int*pointsToA=&a;,然后使用该点stoa间接修改a的内容:c=a+b;d=a-b;f=a*b;h=a/b;g=a%b;因为变量a和变量b还没有初始化,所以编译器应该告诉您这个问题,所以在发布的程序中有很多未定义的行为。强烈建议在调用scanf.OT:about:scanf%d%d\n,&a,&b;之后将这些语句移动到;1始终检查返回值而不是参数值,以确保操作成功。注意:scanf系列函数返回成功的“输入格式说明符”数。在当前语句中,除2之外的任何返回值都表示发生了错误。2不要将“\n”放在字符串格式的末尾这些值在输出中:32766-32766是堆栈上变量a和b所在的垃圾桶&a表示a的位置。您正在告诉scanf在哪里可以找到a,以便它可以向a写入。此外,int*表示指向int的指针。如果变量的类型为int*,它可以将位置保存到int。因此,基本上,您可以编写int*pointsToA=&a;,然后使用该点stoa间接修改a的内容:c=a+b;d=a-b;f=a*b;h=a/b;g=a%b;因为变量a和变量b还没有初始化,所以编译器应该告诉您这个问题,所以在发布的程序中有很多未定义的行为。强烈建议在调用scanf.OT:about:scanf%d%d\n,&a,&b;之后将这些语句移动到;1始终检查返回值而不是参数值,以确保操作成功。注意:scanf系列函数返回成功的“输入格式说明符”数。在当前语句中,除2之外的任何返回值都表示发生了错误。2不要将“\n”放在字符串格式的末尾。这些值在输出中:32766-32766是堆栈上变量a和b所在位置的垃圾。了解指针的工作方式对于理解如何用C编程至关重要。我强烈建议您按照此答案中的建议阅读它们,然后玩指针,直到你对它们的用法有信心为止;y=&x;y的声明应该是:*y,因为它将包含指向double的指针而不是double的指针了解指针的工作原理对于理解如何用C编程至关重要。我强烈建议您按照本答案中的建议阅读它们,然后玩指针,直到你对它们的用法有信心为止;y=&x;y的声明应该是:*y,因为它将包含指向double而不是double的指针