c语言中s++与*s++的区别
(*s++) 解引后得到s指向位置的值,将该值作为表达式的结果,然后s指针往后偏移s++ 即s指针往后偏移*s++ 。
1、编译器解析到*,判断为指针运算符号,需要一个标示符或者表达式;
2、解析到s,是一个合法的标示符,继续搜索是否有更高优先级的运算符;
3、继续解析到++,由于*与++是同一优先级,结合性为右到左,所以等同于*(s++);
4、然后是=,判断为赋值运算符,优先级比++低,因此前面的部分可以直接进行计算。
(*s++) 解引后得到s指向位置的值,将该值作为表达式的结果,然后s指针往后偏移s++ 即s指针往后偏移*s++ 。
1、编译器解析到*,判断为指针运算符号,需要一个标示符或者表达式;
2、解析到s,是一个合法的标示符,继续搜索是否有更高优先级的运算符;
3、继续解析到++,由于*与++是同一优先级,结合性为右到左,所以等同于*(s++);
4、然后是=,判断为赋值运算符,优先级比++低,因此前面的部分可以直接进行计算。
c++语言是c语言发展起来的,所以继承了c语言几乎所有的特点,但c++语言又有自己的个性。c语言是一种面向过程的编程语言,而c++主要是面向过程的,因此c++有类的概念,而c语言就没有。c++的功能强大,编译器复杂,适合高端程序的设计和编辑,c语言的编译器简易,适合低端程序。
楼上错了,前面的s如果是变量就是值加1,如果是指针就是地址加1,后面这个是地址加1而不是指向的内容加1,因为++的优先级高于*,但是注意两者都是事后加!,也就是说如果是a=*s++的话那么是先将*s的值赋给a然后地址再加1,s++也是一样的。
前面的是指针后移,后面的是指向的内容加1。
这样的代码是不规范的。该加括号加括号,避免歧义
c语言中,若有char *s;s=“abcd”; 那么*s=abcd还是a?
s表示一个字符,所以,是a s指向了"abcd" 字符串的首地址,即:s中存储的是"abcd" 字符串的首地址
printf("%s\\n",*s);与printf("%s\\n",s);的区别
char s[]="HowAreYou";printf("%s\\n",s); \/\/s代表的就是字符串"HowAreYou"的地址printf("%s\\n",*s); \/\/*s就是'H',也就是0x48、 \/\/这句的意思就成了:打印处于0x00000048的字符串 \/\/会极大概率会出现段错误访问非法内存。\/\/例如下面的程序#include<stdio.h>int main...
数据结构:顺序栈构造空栈的这两种不同写法中&S与*S,S.base与S->base的...
第一种&s传递的是该实参的引用类型,对这个形参的操作,相当于对实参的操作 第二种*s传递的是指针,这对指针指向的位置的更改也是影响实参的指向的地址的值。
C语言指针问题 **s 中 s与&s的意义和关系
fun函数第一句malloc函数是用来创建一个内存空间的,往往用于链表的动态储存。s=(int*)malloc(sizeof(int));其实可以理解为int i,*s=&i;(这里你可以认为s和a已经没有联系了,因为一个指针只可以指向1个地址)free()函数是一个删除内存函数,常用语链表中删除结点,free(s);的意思就是把...
C语言指针问题 **s 中 s与&s的意义和关系
char *a="123";程序里开辟了一空内存,存放"123",并用指针*a指向它,char**s=&a,把a指向的地址赋给指针的指针**s,但是它没开辟内存空间。在你的程序中开辟内存空间只有char*a="123".你可以用VS这IDE打断电调试,开内存的地址就知道了。对于初学者,理解这有些难度,但是你多看看,多想想几...
c语言中在指针s作为函数返回值时s=&t与*s=t的分别
前面的是返回t的地址,后面则是将t 的值保存到s所指向的内存空间中。在函数中,不能返回局部变量的地址,因为函数结束后,局部变量就被释放了,如否t 是局部变量,则前面这种做法是不允许的,而后面的做法中,s 所指向的空间必须有大小,不允许为空和野指针。
c语言中*s++是取s所指向的内容后,s再加1 还是取s加1后所指向的内容
s++ 等价于 取 s所指向的内容后,s再加1 运算符优先级 低于 ++ 运算符,所以 *s++ 先求 s++,而 s++ 就是先将s保存在一个临时变量中,然后 s 再自增1,最后将临时变量返回, * 运算符 求的只是 临时变量的值, C伪码:s++ 过程:int *temp = s; \/\/先将s保存在一个临时...
C语言中*p代表什么?还有*s代表什么?
p和*s中的p和s是你开设的指针型变量。比如你开设变量时写:int *p,a; char *s,b[10];这就开设了指针变量p可指向整型数据,开设指针变量s可指向字符型数据或字符串;程序中写p=&a; *p=10;可将变量p指向的存储区(这里是你自己定义的变量a的位置)赋值为整型的10;s=b;或s=&b[0]; *s=...
语言学术语s代表什么,比如难道+S
S是主语subject的缩写,O是宾语object的缩写。"难道+S"是“难道”后接主语的意思。
c语言%.*s是什么
在c语言中,a*=b 相当于 a=a*b。那么s*=s 就是s=s*s 也就是 s=s^2。用来指定宽度,对应一个整数。.(点)与后面的数合起来 是指定必须输出这个宽度,如果所输出的字符串长度大于这个数,则按此宽度输出,如果小于,则输出实际长度。
利鸣银黄: C C C A C D D D A D 第九题:strcpy这个函数有漏洞,少用.在TC环境可运行...但是在其他C编程环境中可能会有异常..这个函数的本意是将S2复制给S1(这边的复制相当于替换所有内容).
莱芜市17056039948: 循环语句while(*s++); 和循环语句while(*s){*s++;} 有什么区别? - ?
利鸣银黄: 唯一区别在于 while(*s++)不管*s是否为0,总会++一次 而 while (*s) { *s++;} 则如果*s为0,s就不会变化了 相差一个单位
莱芜市17056039948: C语言中(*ss)++和ss++有什么区别 - ?
利鸣银黄: (*ss)++:ss指针变量所指向的存储空间的值加一 ss++:指针变量值加一 也就是指向下一连续存储空间
莱芜市17056039948: c语言中*p++=*s++;是什么意思? - ?
利鸣银黄: 将指针*c的值赋给*p,然后p,s的地址前进一位.例如 int a[10]={1,2,3,4,5,6,7,8,9,10}; int *p=&a[1],s=&a[5];则执行*p++=*s++后,a[1]=6,*p=a[2]=3,*s=a[6]=7
莱芜市17056039948: c语言中,有指针a,s,跪求a=s与*a=*s有什么区别,谢谢 - ?
利鸣银黄: a=s是把s指向的变量的地址赋给a即a和s现在指向同一个变量了 *a=*s 是把s指向的变量的值赋给a指向的变量的值 第一个改变了a的地址 第二个改变了a所指向的变量的值 你还是看一下指针的内容吧 好好了解什么是指针.指针中存放的只是地址 通过地址找到变量从而可以找到值 指针就像人的住址 人就像变量的值 通过地址(指针)找到人(变量的值)
莱芜市17056039948: c语言中*++p与++*p有什么区别 - ?
利鸣银黄: 区别: 1、*p++与*(p++)是等价的,表示取p所指单元的值,p指向下一单元,即p自加1. 2、*p++是指下一个地址. 3、(*p)++是指将*p所指的数据的值加一. C编译器认为*和++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只...
莱芜市17056039948: c语言中*ss++是什么意思 - ?
利鸣银黄: 若有char array[5] = "abcd"; char *ss = array; printf("%c", *ss++); // 先输出'a',然后指针ss指向'b'
莱芜市17056039948: c语言的,for ( ; *s1; ++s1 )和for ( ; *s1; s1++)有区别吗 - ?
利鸣银黄: 在这里没有区别,++s1 和 s1++ 在赋值表达式中才有区别,单独使用的时候没有区别 在for循环中,这两个相当于都是单独使用,对循环没有任何影响,根据个人习惯,写成s1++ 和 ++s1 都可以 但是在赋值语句中,就要注意了 比如: int s1 = 0; int s2 = s1++; cout 和 int s1 = 0; int s2 = ++s1; cout 这两个的打印结果就不同: 分别是 1 0 和 1 1
莱芜市17056039948: c语言,(*q)++和q++有什么不同 - ?
利鸣银黄: C编译器认为*和++是同优先级操作符,且都是从右至左结合的.由于()的优先级比*和++都高,所以(*q)++中的++就作用在(*q)上(即q指向的目标上)了;q++中的++作用在指针q上而与q指向的目标无关.比如有: int x,a[]={1,2,3,4,5},*q=a; x=(*q)++;//执行这一句后x=a[0]=1,a[0]=a[0]+1=2.就是说++作用在a[0]上,a[0]是q的指向目标.而q++只是让q=a+1,即使q指向了a[1].
莱芜市17056039948: C语言中 *(s+i)和s[i]一样吗 - ?
利鸣银黄: 一样的,你记住一条就好了:s+i=&s[i],等式两边同时进行*运算,得到*(s+i)=s[i]