c语言与cnbsp;++ 一个点C的文件用什么打开?C语言
c语言 *p++与(*p)++、*(p++)三者异同?~
区别:
1、*p++与*(p++)是等价的,表示取p所指单元的值,p指向下一单元,即p自加1。
2、*p++是指下一个地址。
3、(*p)++是指将*p所指的数据的值加一。
C编译器认为*和++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只作用在p上,和*(p++)意思一样;在(*p)++中,由于()的优先级比*和++都高,所以++作用在()内的表达式*p上。
比如有:
int x,y,a[]={1,2,3,4,5},*p=a,*q=a;
x=*p++;//执行这一句后x=a[0]=1,p=a+1
y=(*q)++;//执行这一句后,y=a[0]+1=2,q仍然=a
扩展资料:验证程序1
#include"stdio.h"
void main()
{
int a=2;
int*p=&a;
int*pold;//记录P指向的地址,为了作为比较使用
pold=p;
//-----------原来的信息
printf("原来的a=%d",a);
printf("原来的p=%x",p);
printf("原来的pold=%x",pold);
//----------进行变化
printf("*p++的结果=%d,a的结果a=%d",*p++,a);
printf("地址变化的结果p-pold=%x",p-pold);
}
程序2
#include"stdio.h"
void main()
{
int a=2;
int*p=&a;
int*pold;//记录P指向的地址,为了作为比较使用
pold=p;
//-----------原来的信息
printf("原来的a=%d",a);
printf("原来的p=%x",p);
printf("原来的pold=%x",pold);
//----------进行变化
printf("(*p)++的结果=%d,a的结果a=%d",(*p)++,a);
printf("a的结果a=%d",a);
printf("地址变化的结果p-pold=%x",p-pold);
}
运行结果
程序3
#include"stdio.h"
void main()
{
int a=2;
int*p=&a;
int*pold;//记录P指向的地址,为了作为比较使用
pold=p;
//-----------原来的信息
printf("原来的a=%d",a);
printf("原来的p=%x",p);
printf("原来的pold=%x",pold);
//----------进行变化
printf("a=%d,(*p)++的结果=%d,a的结果a=%d",a,(*p)++,a);
printf("a的结果a=%d",a);
printf("地址变化的结果p-pold=%x",p-pold);
}
程序4
#include"stdio.h"
void main()
{
int a=2;
int*p=&a;
int*pold;//记录P指向的地址,为了作为比较使用
pold=p;
//-----------原来的信息
printf("原来的a=%d",a);
printf("原来的p=%x",p);
printf("原来的pold=%x",pold);
//----------进行变化
printf("*(p++)的结果=%d,a的结果a=%d",*(p++),a);
printf("a的结果a=%d",a);
printf("地址变化的结果p-pold=%x",p-pold);
}
程序5
#include"stdio.h"
void main()
{
int a=2,*p=&a,*q=&a;
printf("%d%d",(*p),a);
printf("%d%d%d",*p++,(*p)++,*q++);
printf("%d",a);
}
程序6
#include"stdio.h"
void main()
{
int a=2,*p=&a,*q=&a;
printf("%d%d",(*p),a);
printf("%d%d%d",(*p)++,*p++,*q++);
printf("%d",a);
}
程序7:
#include"stdio.h"
void main()
{
int a=2,*p=&a,*q=&a;
printf("%d%d",(*p),a);
printf("%d%d%d%d",(*p)++,*p++,*q++,a);
printf("%d",a);
}
程序8:
#include"stdio.h"
void main()
{
int a=2,*p=&a,*q=&a;
printf("%d%d",(*p),a);
printf("%d%d%d",*p++,(*p)++,*q++);
p=&a;q=&a;
printf("%d%d%d%d",a,*p,(*q)++,a);
printf("%d%d%d%d",a,++(*p),++(*q),a);
printf("%d",a);
}
综上所述:
*p++是先取出*p的值,然后让p++
(*p)++是先取出*p的值,让这个值++
*(P++)是先取出*p的值,让p++
所以,*p++等价于*(P++)
而且printf的运行顺序是从右向左运行。而且右++是在整个运算表达式运算完才进行,而且右++的执行顺序是从左到右进行。而左++遇到变量就会立即增加变量的值。
验证printf的运算顺序
#include"stdio.h"
void main()
{
int a=2;
printf("a++=%d,++a=%d,a++=%d",a++,++a,a++);
printf("a=%d",a);
}
用记事本可以打开.cnbsp;nbsp;nbsp;也可以用VC打开 查看更多答案>>
关于c语言auto变量和static变量区别
答:自动变量(auto变量)和静态变量(static变量)主要有以下几点区别:1、static变量存放在静态存储区,在程序整个运行期间都不释放;而auto变量存放在动态存储区,随着生命周期的结束而立即释放。2、static变量只赋值一次,以后就不用赋值;而auto变量在函数每调用一次都要赋初值。3、如果用户不对static变量赋初值...
C语言\t 用法
答:\t \r \n都是转义字符。空格就是单纯的空格。输入时可以输入空格 \t 的意思是 横向跳到下一制表符位置 \r 的意思是 回车 \n 的意思是回车换行。
C语言 选择题
答:C语言还支持另一种预定义数据类型的常量,这就是串。所有串常量括在双 撇号 之间,例如"This is a test"。切记,不要把 字符 和串相混淆,单个 字符常量 是由单撇号括起来的,如'a '。A 'as'应该改成 "as"-0fff应该是-0xfff '\0xa'错的离谱,怎么改都行 B '\\'是合法的。C -0x...
c语言输入一段英文,单词之间有很多空格或者是换行,要求去掉不该出现的...
答:很久没碰C语言,可能有些思路不对,但我尽量按照C语言的方式给出思路:C应该是数组的形式存储字符串,那么你可以给一个flag,我给出大概的Python代码的实现逻辑:迁移到C语言的逻辑实现也一样。大概就是这个思路。如果你的目的是存到另一个数组,那么可以先计算出目标数组的长度,记得C语言要求在定义时...
c 语言中,为什么float型 对应的小数部分是6位?为什么
答:故不能对精度造成影响。float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。http://www.cnblogs.com/c-primer/p/5992696.html ...
C语言的问题
答:3.int a,b; a=1+b=2+7%-4-‘A’. a,b的值为多少?这个复合赋值符你可能写错了 (过程说一下,谢谢)判断:4.C语言提供了一个输入语句scanf和一个输出语句printf。这两个是函数不是语句 5.字符常量存储时,自动在字符后加一个字符结束符号‘\0’只有字符串才加'\0', 而字符常量只有一...
c语言中-0和+0在内存中 怎么储存
答:+0、-0,在计算机中,都是不存在的。在计算机中,数值一律用补码表示和存储。0 在补码中,只有一个编码 0000 0000。--- 只有在原码和反码中,才是有两个零(+0、-0)的编码。但是,在计算机中,原码和反码,都不存在。所以,+0、-0,在计算机中,都是不存在的。那么,琢磨它们,解释...
C语言题求帮助0 0
答:异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。a^b^b= a ^ (b ^ b) = (a ^ b) ^b; 这是异或的运算法则。a ...
c语言中简要叙述break语句和contin ue语句的区别
答:当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起,即满足条件时便跳出循环。例:include <stdio.h> int main(void){ int i=0;char c;while(1){ /*设置循环*/ c='\0';/*变量赋初值*/ while(c!=13&&c!=27){...
C语言 公式为什么写成5.0/9而不是5/9
答:因为在C/C++中5.0/9==0.5555555555...,而5/9==0。这是因为/在两边都是整数时是“取整除”而有一边或两边是浮点数时则被自动提升为“浮点除”的缘故。