您的位置:

c语言赋值换值,c语言赋值运算符的值

本文目录一览:

C语言中赋值语句的语法是怎样的

赋值的语法规则就是:

数据类型 变量名 = 表达式

表达式可以理解为一个值或一个计算公式就行,表达式加一个英文符号分号就是语句。

例如:

我们今天要用到的,我买了几斤苹果。

就可以这样写:

方式一:

Int apple_count = 0; //告诉计算机apple_count是用来存买苹果的斤数的,默认为0;

方式二:

Int apple_count; //告诉计算机apple_count是用来存买苹果的斤数的,以后再告诉计算机它等于多少,现在不知道;

扩展资料

1、C语言中,赋值运算的操作是有方向的,即将右侧表达式的值(也称为右值)赋值左侧的变量,只能是标识一个特定存储单元的变量名。

2、由于变量名只能出现在赋值运算符的左边,因此它也被称为左值;由于常量只能出现在赋值运算符的右边,因此它也被称为右值。左值可以用作右值,但右值不能用作左值。

在C语言中的各种赋值是如何转换的?

关于赋值操作,你可以查看一下博客的内容,初学者不用理解底层汇编的实现机制,有点晦涩,随着自己的进步可以进一步的深入底层查看其实现原理

1 代码案例

iint main()

{

int n,m;

char ch;

float f = 12.12;

double d=121.111;

n = f; //单精度浮点赋值给整数

m =d; //双精度浮点赋值给整数

ch = n; //整数赋值给字符值

ch = f; //浮点赋值给字符值

f = d; //整数变量赋值给浮点变量;

return 0;

}

2 以上代码调试运行对应的汇编代码分析

101: float f = 12.12; //单精度浮点赋值:占用4个字节,需要1条汇编指令实现

源代码对应1条汇编指令:

00401C78 mov dword ptr [ebp-10h],4141EB85h

102: double d=121.111; //双精度浮点赋值:占用8个字节,需要2条汇编指令实现

源代码对应2条汇编指令:

00401C7F mov dword ptr [ebp-18h],9FBE76C9h

00401C86 mov dword ptr [ebp-14h],405E471Ah

103: n = f; //单精度浮点赋值给整数

源代码对应3条汇编指令:

00401C8D fld dword ptr [ebp-10h]

00401C90 call __ftol (004232cc)

00401C95 mov dword ptr [ebp-4],eax

104: m =d; //双精度浮点赋值给整数

源代码对应3条汇编指令:实际的类型转换通过调用内部C运行时接口函数__ftol来实现类型转换。

00401C98 fld qword ptr [ebp-18h]

00401C9B call __ftol (004232cc) //调用__ftol函数(对应15条汇编指令,见下面3描述)

00401CA0 mov dword ptr [ebp-8],eax

105: ch = n; //整数赋值给字符值

源代码对应2条汇编指令:

00401CA3 mov al,byte ptr [ebp-4]

00401CA6 mov byte ptr [ebp-0Ch],al

106: ch = f; //浮点赋值给字符值

源代码对应3条汇编指令:

00401CA9 fld dword ptr [ebp-10h]

00401CAC call __ftol (004232cc)

00401CB1 mov byte ptr [ebp-0Ch],al

107: f = d; // 整数转换为浮点数,源代码对应2条汇编指令:

00401CB4 fld qword ptr [ebp-18h]

00401CB7 fstp dword ptr [ebp-10h]

3 赋值涉及的__ftol函数对应的汇编指令:

__ftol 函数对应以下16条指令:

004232CC push ebp

004232CD mov ebp,esp

004232CF add esp,0F4h

004232D2 wait

004232D3 fnstcw word ptr [ebp-2]

004232D6 wait

004232D7 mov ax,word ptr [ebp-2]

004232DB or ah,0Ch

004232DE mov word ptr [ebp-4],ax

004232E2 fldcw word ptr [ebp-4]

004232E5 fistp qword ptr [ebp-0Ch]

004232E8 fldcw word ptr [ebp-2]

004232EB mov eax,dword ptr [ebp-0Ch]

004232EE mov edx,dword ptr [ebp-8]

004232F1 leave

004232F2 ret

4 C运行库(Run-Time Library)存在的原因

4.1 定义(摘自《软件调试》,张银奎)

当编译器在将高级语言编译到第几语言的过程是,因为高级语言中的某些比较负责的运算符(如不同的类型转换)要对应比较多的低级语言指令(如汇编、机器指 令),为了防止这样的指令段多次重复出现在目标代码中(造成目标码过大),编译器通常将这些指令段封装为函数,然后将高级语言的某些操作翻译为函数调用。

C标准定义了标准C函数,C++标准定义了C++标准类库,这些库通常被称为支持库,这些库是程序编译运行的必要条件,因此支持库也称为运行库(Run-Time Library).

VC提供了C和C++运行库。

4.2 例子

1)如上面例子,VC编译器通常将 n =f( n :整数,f:浮点数)这样的赋值编译为调用__ftol函数;

2)VC编译器也将new ,delete 操作符编译为对malloc和free函数调用(可以通过单步调试运行,反汇编单步跟着call 指令观察分析验证!)

5 总结

1)通过以上分析,不同类型变量转换,是编译程序在编译程序过程中,将操作转换编译成调用运行库函数来实现的。

2)一般程序设计过程中,不是必要情况下,不要频繁使用不同类型互相转换的操作,特别是涉及到循环运算、性能的优化的程序!

c语言赋值是替换的意思么?

我觉得可以这样理解啊,比如你声明一个a,系统会随机分配一个值给a,直到你给a赋了值,你赋的值就会替换掉a原来的值,此时a就等于你所赋的值。

C语言交换变量值的几种方法

方法一:三变量交换。

#includestdio.h

int main(void)

{

int a,b;

scanf("%d%d",a,b);

int t=a;a=b;b=t;

printf("%d %d\n",a,b);

return 0;

}

方法二:加减交换

#includestdio.h

int main(void)

{

int a,b;

scanf("%d%d",a,b);

a=a+b;

b=a-b;

a=a-b;

printf("%d %d\n",a,b);

return 0;

}

方法三:异或交换

#includestdio.h

int main(void)

{

int a,b;

scanf("%d%d",a,b);

a=a^b;b=b^a;a=a^b;//可写成a^=b^=a^=b;

printf("%d %d\n",a,b);

return 0;

}

方法四(黑盒测试下):不交换

#includestdio.h

int main(void)

{

int a,b;

scanf("%d%d",a,b);

printf("%d %d\n",b,a);

return 0;

}

C语言交换语句的赋值问题

当然不变,程序中定义的任何变量都是有值的,即使你说的T没赋值,程序也会在初始化得时候给它一个随机赋值,赋值只是将目标变量的值拷贝给当前变量,所以目标变量的值是不会发生改变的。