本文目录一览:
一个很简单但很奇怪的C语言问题
你的函数的形参传的是值,在进入函数时为struct st t分配空间,在函数结束后该空间被释放了,所以是乱码
试试用引用
char *f(struct st t);//声明
char* f(struct st t){}//定义
一条奇怪的c语言题,在visual C++上编译不了
typedef struct type // 前面漏了typedef
{
long x[2];
short y[4];
char z[8];
}MYTYPE;
//MYTYPE them;
int main()
{
struct type them;
printf("%d\n",sizeof(them));
return 0;
}
这道题主要看你在多少位的机器上运行,我在32位的机器上运行是24
2个long,8个字节
4个short,8个字节
8个char,8个字节
共24个字节,这里没涉及字节对齐的问题
奇怪的 C 语言
首先指出,你的C语言写法很不符合C语言规范。请注意正确书写。函数定义再调用之后,请在函数调用之前先进行声明。你没有。第二,每个函数需要有返回值。你的函数都没用返回值,如果不需要返回值,请将返回值写成void,你没用。
回答
问题一:
在main()函数中三次调用increment();每次调用的时候在increment() 内部都重新分配x的空间,都重新对x复制0,然后在x+=1;执行完一个increment(); 后释放空间。此时的x就没了。再次调用,再次分配空间,再次赋值。
问题二:把你的程序修改成C语言规范的。的输出结果是:10,20,40,40
程序为:
#includestdio.h
int x1=30,x2=40;
void sub(int x,int y);
void main()
{
int x3=10,x4=20;
sub(x3,x4);
sub(x2,x1);
printf("%d,%d,%d,%d\n",x3,x4,x1,x2);
}
void sub(int x,int y)
{
x1=x;
x=y;
y=x1;
}
一条C语言的题目。怪怪的
你看的应该是例题,这个题目就是考察你对于同名变量的鉴别。
1 x,y,z,w不是全局变量吗?怎么又重新定义了static?
他就是这么定义,然后你使用的时候根据作用域不同,实际使用的是static x 和其他 的函数内定义的变量,也就是全局的被覆盖了。
2 x和p函数里面的*y什么关系?感觉好混乱,求解释
p函数的x y是实参,定义的void p(int *y, int x)是形参。
赋值的时候,严格按照第一个给第一个,第二个给第二个的方法传递,不要被名字混淆。
严格来说,这样的代码很不规范,但是不影响编译。
只是很难维护和理解。
纯手打,采纳哦