我是C的新手.我需要通过以下代码了解屏幕上打印的每个值的含义:
#include<stdio.h>
int main()
{
int x = 10;
int *ptr = &x;
printf("%d %d %d\n", *ptr,**&ptr, 2**ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出(GCC):
10 10 20
Run Code Online (Sandbox Code Playgroud)
在这里,我声明了变量x并ptr指向x变量.所以,*ptr印刷价值x.但我不明白的价值**&ptr和2**ptr.
提前致谢.
我在这个例子中找到了以下代码:
addr.sin_addr.s_addr = *(long *)(host->h_addr);
Run Code Online (Sandbox Code Playgroud)
h_addris是一个char指针,host是指向类型结构的指针hostent.addr是类型的结构sockaddr_in和sin_addr类型是一个结构in_addr.s_addr是一个uint32.
大部分信息可以在这里找到:http://man7.org/linux/man-pages/man7/ip.7.html
我很确定(long)将char转换为long,但我不知道这些额外的星号是做什么的,特别是因为s_addr它不是指针.
有人能解释一下这里发生了什么吗?
我在操作 ac 代码中的一些指针时发现了一些我无法理解的东西。
int main(){
int tab[]={4,6,8,9,20};
printf("%p %p",tab,&tab);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我尝试打印变量选项卡及其地址,知道选项卡保存数组中第一个元素的地址,并且选项卡本身的地址将是一个随机地址值,但无论出于何种原因,程序输出相同的值,我发现这真的很奇怪,所以如果有人能向我解释原因,我将不胜感激。
我记得我的编程教授说过指针的乘法和除法是不允许的。我们有一个工作需要我们创建一个程序,使用指针对两个数字进行加、减、乘和除。
这是我在主函数中的代码:
float num1, num2, a, b, c, d;
printf("Enter a number: ");
scanf("%f", &num1);
printf("Enter another number: ");
scanf("%f", &num2);
a = add(&num1, &num2);
b = subtract(&num1, &num2);
c = multiply(&num1, &num2);
d = divide(&num1, &num2);
printf("Sum: %.2f\nDifference: %.2f\nProduct: %.2f\nQuotient: %.2f", a, b, c, d);
getch();
return 0;
Run Code Online (Sandbox Code Playgroud)
这是我的加、减、乘和除函数代码:
float add(float *x, float *y)
{
return *x+*y;
}
float subtract(float *x, float *y)
{
return *x-*y;
}
float multiply(float *x, float *y)
{
return *x * *y;
}
float …Run Code Online (Sandbox Code Playgroud)