我只是编写一个程序来计算整数的幂.但产量不如预期.除了5的幂之外,它适用于所有整数.
我的代码是:
#include <stdio.h>
#include <math.h>
int main(void)
{
int a,b;
printf("Enter the number.");
scanf("\n%d",&a);
b=pow(a,2);
printf("\n%d",b);
}
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
"Enter the number. 2
4
"Enter the number. 5
24
"Enter the number. 4
16
"Enter the number. 10
99
Run Code Online (Sandbox Code Playgroud)
我们不能使用pow()int数据类型的函数??
我正在尝试确定各种浮点类型的范围.当我读到这段代码时:
#include <stdio.h>
main()
{
float fl, fltest, last;
double dbl, dbltest, dblast;
fl = 0.0;
fltest = 0.0;
while (fl == 0.0) {
last = fltest;
fltest = fltest + 1111e28;
fl = (fl + fltest) - fltest;
}
printf("Maximum range of float variable: %e\n", last);
dbl = 0.0;
dbltest = 0.0;
while (dbl == 0.0) {
dblast = dbltest;
dbltest = dbltest + 1111e297;
dbl = (dbl + dbltest) - dbltest;
}
printf("Maximum range of double variable: %e\n", …Run Code Online (Sandbox Code Playgroud) 我试图理解将多维数组传递给c中的函数的"最佳实践"(或实际上是任何实践).当然这取决于应用程序,因此我们考虑编写一个函数来打印可变大小的2D数组.特别是,我对如何printArry(__, int a, int b)在下面的代码中编写函数感兴趣.我省略了第一个参数,因为我不确定应该是什么.
void printArry(_____, int a, int b){
/* what goes here? */
}
int main(int argc, char** argv){
int a1=5;
int b1=6;
int a2=7;
int a2=8;
int arry1[a1][b1];
int arry2[a2][b2];
/* set values in arrays */
printArry(arry1, a1, b1);
printArry(arry2, a2, b2);
}
Run Code Online (Sandbox Code Playgroud) c arrays pointers multidimensional-array variable-length-array
我读到当程序进行函数调用时,被调用函数必须知道如何返回其调用者.
我的问题是:被调用函数如何知道如何返回其调用者?是否有通过编译器在幕后工作的机制?
我知道这是非常基本的,但对我来说有点混乱.
我读了:
一个指针只不过是一个多地址,并且指针变量只是可变量存储地址.
当我们将变量的地址存储i在指针变量中时p,我们说它p指向i.
int i, *p = &i;
Run Code Online (Sandbox Code Playgroud)
p指向i.
为了访问指针指向的对象,我们使用*(间接)运算符.
如果
p是指针则*p表示p当前指向的对象.
现在我很困惑,我应该调用什么p- 指针或指针变量?
附加:指针是否始终与地址相同?
据说这里是
术语可修改的左值用于强调左值允许指定的对象被改变以及被检查.以下对象类型是左值,但不是可修改的左值:
- 数组类型
- 不完整的类型
- const限定类型
- 结构或联合类型,其成员之一被限定为const类型
因为这些左值不可修改,所以它们不能出现在赋值语句的左侧.
为什么数组类型对象不可修改?写不正确
int i = 5, a[10] = {0};
a[i] = 1;
Run Code Online (Sandbox Code Playgroud)
?
而且,什么是不完整的类型?
char *str = "Hey baby";
Run Code Online (Sandbox Code Playgroud)
为字符串创建内存并指向str它.如果这是有效的,为什么不是以下内容:
int *x = {7, 0, 1};
Run Code Online (Sandbox Code Playgroud)
这应该做同样的事情,除了它们是ints而不是chars.
我想问一下C变量是如何存储在C中的?
要更清楚地考虑以下代码:
int main() {
int a = 1, b;
b = a + 2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
例如,在这里,存储器C存储可变位置的名称.
例如,如果&a=0x12A7(假设)&b=0x123B1,那么c如何以及在何处存储变量名称,例如存储内存名称a?
我们说表达"评估"值和语句命令计算机"执行".但对我来说,似乎是相同的术语.C中的执行和评估有什么区别?
功能原型
void foo(int n, int a[][]);
Run Code Online (Sandbox Code Playgroud)
给出了关于不完整类型的错误
void foo(int n, int (*a)[]);
Run Code Online (Sandbox Code Playgroud)
编译.根据衰减规则int a[][]相当于int (*a)[]在这种情况下,因此也int (*a)[]应该给出关于不完整类型的错误,但GCC似乎接受它.有什么我想念的吗?这可能是一个GCC错误,但我没有发现任何与之相关的内容.