int** ppfloat和intt* *ppfloat和intt **pp

第2章 数据类型和表达式_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
第2章 数据类型和表达式
大小:144.38KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢2415人阅读
1.&(4分)&求与下述公式逻辑等值的前束合取范式:
2.&(8分)&对于命题公式P、Q、R,证明以下等值关系:
&&&(1)&定义集合S={1,2,3,4,5}上的二元关系R1={&i,j&|&j&=&i&或&j&=&i&/&2},&R2={&i,&j&&|&i&&&j},求合成关系R2R1和R1R2.
&&&(2)&写出R2的关系图和关系矩阵,并指出其是否自反、反自反、对称、反对称、传递?
4.&(8分)&设&G,&*&是群,H是G的非空子集。
证明:若任给a,&b&∈&H,都满足a*b-1∈H,&则&H,&*&是&G,&*&的子群。
5.&(6分)&证明:图G连通,每个结点的度数均为偶数,则对G的任意结点v,w(G-v)&=1/2d(v)。其中d(v)表示节点v的度数,w(G)表示图G的连通分图的个数。
6.&(6分)&设G为连通图,任给节点v∈V(G),是否有w(G-v)&=2?任给边e∈E(G),是否有w(G-e)&=2?请分别给出证明或反例。
1.&(8分)画出接受(a|ab)*a*所描述语言的最简DFA的状态转化图。
2.&(6分)试证明如下文法既不是LL(1)文法,也不是LR(1)文法。
&&&&&&&&&&&&&&&A-&aAa|a
3.&(8分)有文法如下:
S-&(L)&&&&&&S-&a&&&&&L-&L,S&&&&&L-&S
假设我们对输入句子中每一个a进行编号。方法如下:将配对的括号看作一个“作用域”,当进入一个作用域时,接着“当前序号”进行连续编号;当退出一个作用域时,则恢复在进入该作用域时的那个“当前序号”。对于句子(a,(a,(a,a),(a))),编号为1&2&3&4&3。试写一个语法制导定义,实现上序编号。
4.&(6分)C语言函数f的定义如下:
int f(int x, int *py, int **ppz){
**ppz += 1;
*py += 2; x*=3;
return x + *py + **
若c为整型变量,执行下面代码后d和c的值分别为多少,为什么?
a&=&&b;&&b&=&&c;&&c&=&5;&&d&=&f(c,&b,&a);
5.&(6分)一个C语言程序如下:
void fun(struct{} *val){ }
struct{} *
fun (val, 1);
该程序在X86/Linux机器下报告错误信息如下:
(省略,若干个警告,一个错误)
请解释为什么会报告上述的警告和错误。
6.&(6分)如果变量i和j都是int类型,k是char类型,请写出表达式&i、&k和表达式&i-&j的类型表达式。为帮助你回答问题,下面给出程序作为提示
#include &stdio.h&
printf (&%d
%d\n&, &i - &j, &i - &k);
它编译是输出如下错误:
Type.c:&in&function‘main':
Type.c:6:error:invalid&operands&to&binary&-
如果将k的类型改成int,则程序编译通过且运行时输出1&&2。
完整word版请点击下载:&&
版权所有,转载请注明出处!
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:113741次
积分:1966
积分:1966
排名:第10602名
原创:72篇
评论:62条
本博客的内容如果没有标注转载字样,均属个人原创!欢迎学习交流,如果觉得有价值,欢迎转载,转载请注明出处,谢谢!
(5)(6)(1)(2)(3)(3)(4)(5)(1)(3)(1)(3)(1)(2)(1)(6)(15)(2)(2)(3)(9)您还未登陆,请登录后操作!
谢谢谁可以帮忙完成张C语言的试卷 关于指针的!加急!
输入3个数,同时编写一个函数,对传递过来的3个数选出最大值和最小值,并通过形参传递回调用函数(主函数)。在主函数中输出这3个数的最大值和最小值。
(2)编写一段程序,在主函数中,从键盘输入两个数,同时编写一个函数,对传递过来的两个数求出其和与差,并将计算结果通过形参传递回调用函数(主函数)。在主函数中输出这两个数的和与差。
(3)编写一段程序,设置一个排序函数sort,将字符串按照从小到大的顺序进行排序,字符串的输入输出在主函数中进行,要求函数sort有两个形参,一个为指向字符串的指针p_str,另一个为字符串的个数n。
给你写几个吧,指针是C的精髓,想在软件方面发展好好努力吧,不要工作后才后悔。
5.因该是b=9吧,9,6
6.1,-1,-2
void max_min(int *a,int *b,int *c){
if(*a&*b){
if(*a&*c){
if(*c&*b){
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
max_min(&a,&b,&c);
printf("%d,%d",a,b);
上,怎么可能给你把答案全写下?一共才能发五十字还不让续帖。
您的举报已经提交成功,我们将尽快处理,谢谢!
大家还关注提问回答都赚钱
> 问题详情
若有定义和语句int**pp, *p,a=10,b=20;pp=&p;p=&a;p=&b;printf("%d,%d\n",*p,**pp);
悬赏:0&&答案豆&&&&提问人:匿名网友&&&&提问收益:0.00答案豆&&&&&&
若有定义和语句 int * *pp, *p,a=10,b=20; pp=&p;p=&a;p=&b;printf("%d,%d\n",*p,**pp); 则输出结果是( )A.10,10B.10,20C.20,10D.20,20请帮忙给出正确答案和分析,谢谢!
发布时间:&&截止时间:
网友回答&(共0条)
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&8.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&8.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&8.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&5.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
你可能喜欢的
请先输入下方的验证码查看最佳答案17571人阅读
1、指针的初始化
指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。此时,*p只是表示定义的是个指针变量,并没有间接取值的意思。
int a = 25;
int *ptr = &a;
int b[10];
int *point = &&
int *p = &b[0];
如果:int &*p;
& & *p = 7;
则编译器(vs2008)会提示The variable 'p' is being used without being initialized.即使用了未初始化的变量p。
因为p是指向7所在的地址,*p = 7给p所指向的内存赋值,p没有赋值,所以p所指向的内存位置是随机的,没有初始化的。
p = &k; &//给p赋值
*p = 7; //给p所指向的内存赋值,即k= 7
2、指针的赋值
指针的赋值,“=”的左操作数可以是*p,也可以是p。
当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;
当“=”的左操作数是p时,改变的是p所指向的地址。
数组的变量名b表示该数组的首地址,因此p=b;也是正确的
同类型的指针赋值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
p1 = p2; & //注意啦,p1指向了val2,而没有指向val1
备注:字符串与指针的初始化和赋值
char *cp = &abcdefg&; //这个初始化过程,是将指针cp指向字符串的首地址,而并不是传递字符串的值。因为,在C语言里面,没有整体处理一个字符串的机制
赋值:
cp = &abcdefg&;
*cp=”abcdefg” ;//错误!字符串常量传递的是它的首地址,不可以通过*cp修改该字符串的值,因为该字符串为常量,而它只是简单的将指针指向该字符串常量
3、指针常量
在C语言中没有一种内建(built-in)的方法去表示指针常量,所以当我们使用它的时候通常先写成整型常量的形式,然后再通过强制类型转换把它转换成相应的类型,如:int * , double * , char *等。&所以后面所示的做法是不行的:&int *p = 0x ;&正确的方式应为:int *p = (int *) 0x; 要注意指针中只能存放地址,不能将一个非0值整型常量表达式或者其他非地址类型的数据赋给一个指针,原因就在此。在大多数计算机中,内存地址确实是以无符号整型数来表示的,而且多以16进制表示,但我们在C语言中不能用整型数去表示地址,只能用指针常量来表示,因为它是被用来赋给一个指针的。
对于这个赋值问题还可以换一个角度去理解,在C语言中,使用赋值操作符时,赋值操作符左边和右边的表达式类型应该是相同的,如果不是,赋值操作符将试图把右边表达式的值转换为左边的类型。所以如果写出int *p = 0x ;&这条语句编译器会报错:'=' : cannot convert from ' const int ' to ' int * '&,因为赋值操作符左边和右边的表达式的类型应该相同,而0x是int型常量,p是一个指向int型的指针,两者类型不同,所以正确的方式是:int
*p = (int *) 0x ;&
4、指针初始化补充
ANSI C定义了零指针常量的概念:一个具有0值的整形常量表达式,或者此类表达式被强制转换为void *类型,则称为空指针常量,它可以用来初始化或赋给任何类型的指针。也就是说,我们可以将0、0L、'/0'、2–2、0*5以及(void *)0赋给一个任何类型的指针,此后这个指针就成为一个空指针,由系统保证空指针不指向任何对象或函数。
ANSI C还定义了一个宏NULL,用来表示空指针常量。大多数C语言的实现中NULL是采用后面这种方式定义的:#define&&NULL&&((void *)0)。
对指针进行初始化时常用的有以下几种方式:
& 1.采用NULL或空指针常量,如:int *p = NULL;或&char *p = 2-2;&或float *p = 0;
& 2.取一个对象的地址然后赋给一个指针,如:int i = 3;&&int *ip = &i;
& 3.将一个指针常量赋给一个指针,如:long *p = (long *)0xfffffff0;
& 4.将一个T类型数组的名字赋给一个相同类型的指针,如:char ary[100]; char *cp =
& 5.将一个指针的地址赋给一个指针,如:int i = 3;&&int *ip = &i;int **pp = &
& 6.将一个字符串常量赋给一个字符指针,如:char *cp = “abcdefg”;
对指针进行初始化或赋值的实质是将一个地址或同类型(或相兼容的类型)的指针赋给它,而不管这个地址是怎么取得的。要注意的是:对于一个不确定要指向何种类型的指针,在定义它之后最好把它初始化为NULL,并在解引用这个指针时对它进行检验,防止解引用空指针。另外,为程序中任何新创建的变量提供一个合法的初始值是一个好习惯,它可以帮你避免一些不必要的麻烦。
5、void *型指针
ANSI C定义了一种void *型指针,表示定义一个指针,但不指定它指向何种类型的数据。void *型指针作为一种通用的指针,可以和其它任何类型的指针(函数指针除外)相互转化而不需要类型强制转换,但不能对它进行解引用及下标操作。C语言中的malloc函数的返回值就是一个void *型指针,我们可以把它直接赋给一个其他类型的指针,但从安全的编程风格角度以及兼容性上讲,最好还是将返回的指针强制转换为所需的类型,另外,malloc在无法满足请求时会通过返回一个空指针来作为“内存分配失败”的信号,所以要注意返回值指针的判空。
6、指向指针的指针
在指针初始化的第5种方式中提到了用一个指针的地址来初始化一个指针。回忆一下上一讲的内容:指针是一种变量,它也有自己的地址,所以它本身也是可用指针指向的对象。我们可以将指针的地址存放在另一个指针中,如:
int i = 5000;
int *pi = &i;
int **ppi = &
此时的ppi即是一个指向指针的指针,下图表示了这些对象:
&& & & & & & & & & & && &&
i的地址为108,pi的内容就是i的地址,而pi的地址为104,ppi的内容即是pi的地址。对ppi解引用照常会得到ppi所指的对象,所获得的对象是指向int型变量的指针pi。想要真正地访问到i.,必须对ppi进行两次解引用,如下面代码所示:
printf(&%d&, i );
printf(&%d&, *pi );
printf(&%d&, **ppi );
以上三条语句的输出均为5000。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:66925次
排名:千里之外
原创:10篇}

我要回帖

更多关于 int和char的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信