c语言字符串转int中 int i=5;那么 int *p=&i和int &p=I和int p=&i的区别?

C语言中 int i=5;那么 int *p=&i和int &p=I和int p=&i的区别?_百度知道
C语言中 int i=5;那么 int *p=&i和int &p=I和int p=&i的区别?
请讲的通俗易懂一点, 上面的加*和不加*到底有什么区别?这里的*p的值是多少,p的值又分别为多少?
提问者采纳
在C中,若有int i=5;,则int *p=&i;是正确的。int *p=&i;是声明指针p时同时初始化为i的地址,是一种综合写法,分开写是int *p; p=&i。后面int &p=I和int p=&i都是错误语句,根本谈不上有什么不同的问题。
提问者评价
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁125158人阅读
&&& 接下来,通过示例彻底理解自增运算符的两种用法(自减的用法与之类似,只不过是加1变成了减1)。
&&& 1、++i和i++的区别
&&& 如清单1(注意代码中的注释):&
#include &stdio.h&
int main(void)
int a, b, i = 7;
i++; //等价于i = i + 1;
++i; //等价于i = i + 1;
a = i++; //等价于a = i = i + 1;
b = ++i; //等价于i = i + 1; b =
printf(&a = %d, b = %d\n&, a, b);
&&& 例子输出结果:&
a = 9, b = 11
&&& 在例子中,第7和第8行的作用一样,仅仅是为变量i加1,这时i的值已经增加为9,接下来第10行变量a先获得i的值(即9),然后i加1,第11行变量i先再加1,然后把得到的值赋给b,所以b的值为11。
&&& 稍微复杂的例子,如清单2:&
#include &stdio.h&
int main(void)
int a = 5;
int *p = &a;
int b = (*p)++; //等价于b = a++; 即b = a = a + 1;
int c = ++(*p); //等价于c = ++a; 即a = a + 1; c =
printf(&b = %d, c = %d\n&, b, c);
printf(&(*p)++ = %d, ++(*p) = %d\n&, (*p)++, ++(*p));
&&& 例子输出结果:&
b = 5, c = 7
(*p)++ = 8, ++(*p) = 8
&&& 在这个例子中,只不过是通过*p来间接地操作a,其他关于自增运算符的用法与清单1类似。第9行的*p一定要用小括号括起来,否则含义就不一样了。而第11行的++(*p)也可以写成++*p(用GCC验证过),那是因为对操作数p来说它只有一个运算符*在计算它,所以无关乎运算符优先级和结合性的问题。
&&& 值得注意的是,由于C语言没有指定函数各参数的求值顺序,所以第15行的代码是不可移植的,用不同的编译器可能会产生不同的结果(对于这个例子,GCC是先计算++(*p),后计算(*p)++,所以两者都等于8)。
&&& 知识点:
&&& (1)、副作用
&&& 在对表达式求值的同时,修改了某些变量的值,其中修改值的行为在C语言中被叫作副作用,那是因为对C语言而言,计算的目的就是对表达式求值,如语句int a = 5,它的含义是先求值得到5,然后把5赋值给变量a,后一步的赋值就是此表达式的副作用。自增和自减运算符就是因为副作用而被使用,除了加1或减1之外,还给自身赋值。
&&& (2)、运算符的优先级
&&& 在C语言中,把运算符的优先级分为15级,如下表,从上到下,依次为从最高优先级到最低优先级(为了方便记忆,将15级分成11类,并对每类进行了命名)。
初等运算符
包括小括号 ()、中括号 [] 、成员访问运算符 . 和 -& 。
一元运算符
包括自增++和自减--、正负号+ 和-、间接运算*和取址运算& 、类型转换(type)、 sizeof 、逻辑反! 、位取反~等。
算术运算符
包括两级,先乘除(*、/、%)后加减(+、-)。
位移运算符
包括左移 && 和右移 && 。
关系运算符
包括小于 & 、小于等于 &= 、大于 & 、大于等于 &= 。
判等运算符
包括相等 == 和不相等 != 。
位逻辑运算符
分三级,依次为位与 &、位异或 ^ 和位或 | 。
逻辑运算符
分两级,依次为逻辑与 && 和逻辑或 || 。
条件运算符
赋值运算符
包括= 、+= 、-=、 *=、 /=、 %= 、&= 、^=、 |= 、&&= 、&&= 。
逗号运算符
&&& (3)、结合性
&&& 对于同一操作数,在具有两个相同优先级的操作符时决定先执行哪个操作符的问题就是由结合性决定的。
&&& 相同优先级的操作符具有同样的结合性。右结合性就是说表达式中最右边的操作最先执行,然后从右到左依次执行。在C语言中,具有右结合性的操作符只有相应的三类,分别为一元运算符、条件运算符和赋值运算符。
&&& 注意:C语言中的优先级和结合性都是针对同一操作数而言的。如表达式24/8*2,对于操作数8而言,/ 和*的优先级相同,所以再根据它们的左结合性可知,表达式是先计算24/8得到3,然后计算3*2得到6。
&&& C语言并没有规定同一运算符相关的多个操作数的计算顺序(&&、|| 、? : 和 , 运算符除外),如式子a = 8 * 9 + 20 * 4,对操作数9和20而言,根据优先级就可判断先乘后加,但表达式中的两个*并不共享同一操作数,所以从左到右的结合性并不适用它,8 * 9 和20 * 4的计算顺序是不定的,到底先计算8 * 9还是20 * 4由编译器决定。
&&& 在上面例子中,8 * 9和20 * 4谁先执行都不影响最后结果的一致,但有些情况下就未必了,如“ b = 3; a = (b++) * (b++); ”这样的例子,对于不同的编译器最后a的值可能等于9,也可能等于12,甚至可能等于16。因此,在实际应用中不能出现这样的未确定性,根据自己的需要,可以把它改成类似“b = 3; c = b++; a = c *”这样的形式。
&&& 2、*p++和*++p的区别
&&& 举例,如清单3:&
#include &stdio.h&
int main(void)
int arr[] = {1, 2, 3, 4};
int a = *p++; //等价于a = *(p++); 即a = *p; p = p + 1;
int b = *++p; //等价于b = *(++p); 即p = p + 1; b = *p;
printf(&a = %d, b = %d\n&, a, b);
&&& 例子输出结果:&
a = 1, b = 3
&&& 对于第8行的操作数p而言,*和++的优先级相同,但根据它们的右结合性可知,在这个表达式里可认为++的优先级高于*,即*p++等价于*(p++)。
&&& 而对于第10行的操作数p而言,它只有一个运算符++,所以先计算++p得出结果,然后间接运算。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:347364次
积分:3073
积分:3073
排名:第5709名
原创:69篇
评论:83条
本博客所有文章均为原创,每篇尽心尽力,力求精益求精,转载请注明出处http://blog.csdn.net/npy_lp和署名tanglinux,商业用途请联系。
(1)(1)(1)(1)(6)(10)(10)(1)(9)(29)C语言模拟试题题库
本试题来自:(2006年C语言模拟试题,)一、选择题下列各题A、B、C、D四个选项中,只有一个是正确的。若有说明int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是
( )A.i=*p;B.*p=*&jC.i=&jD.i=* *p;正确答案:有, 或者
您可能感兴趣的试题
单项选择题:(<a title='有以下程序   main( )   { int a[3][3],*p,i;    p=&a[0][0];    for(i=0;i/shiti/2748731/)有以下程序
  main( )
  { int a[3][3],*p,i;
   p=&a[0][0];
   for(i=0;i<9;i++) p[i]=i+1;
   printf("%d \n",a[1][2]);
  程序运行后的输出结果是
D)2答案:有,答案解析:有,单项选择题:()下列关于C语言数据文件的叙述中正确的是
A)文件由ASCII码字符序列组成,C语言只能读写文本文件
B)文件由二进制数据序列组成,C语言只能读写二进制文件
C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件
D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件答案:有,答案解析:有,
C语言模拟试题最新试卷
C语言模拟试题热门试卷若定义int i,*p;是p指向i的赋值语句是().A,p=&i B,*p=&i C,*p=i D,int (*p)[4]_百度知道
若定义int i,*p;是p指向i的赋值语句是().A,p=&i B,*p=&i C,*p=i D,int (*p)[4]
若定义int i,*p;是p指向i的赋值语句是(
).A,p=&i B,*p=&i C,*p=i D,int (*p)[4]
提问者采纳
A.p=&i;正确。
怎么说????
int i,*p;是声明i是int型变量,p是int *型指针变量。题目要求“p指向i的赋值语句”就把i的地址传递给p,而&i就是取i的地址,p=&i;就是把i的地址赋给了p。这还有怀疑?
谢谢!!还有一道题!!char s[] = &ABCD&;int main(viod){
int char *p;
for(p=s;p&s+4;p++)
printf(&%s&#92;n&,p);
return 0;}输出结果为:(
ABCDBCDCDD
int main(void){ int i = 5; do{
switch(i%2){
case 4: i--;
case 6: i--;
}i--;i--;printf(&%2d&,i); }while(i&0);return 0;}输出结果为:(
3 1-1这代码那个switch的两个case都没有匹配,所以不执行,很简单。
设a=5,b=3,c=2,则a&b的值是( ),a&b&c的值是( )
a&b的值是(true),a&b&c的值是(false)。数的大小你都不会看了?
我还是有点不太明白!!还有一题:设有如下定义:int a[6] = {1,2,3};则数组各元素的初始值为:a[0]=(
)。答案分别是:1
应该是1 3 0.
提问者评价
后面为什么是0呢?还有题编程题:编写完整程序,实现如下功能:从键盘上输入一个字符串,统计字符串的长度
其他类似问题
为您推荐:
赋值语句的相关知识
其他1条回答
买什么个人中心手机知道#芝麻开门#若定义int i,
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言int转char 的文章

 

随机推荐