文档介绍:java笔试题
C语言的模块化程序结构用函数来实现,马上复杂的C程序分为若干模块,每个模块全部编写成一个C函数,然后经过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,下面就由X为大家介绍一下C语言指针笔试题的文章。
C语言指针笔试题篇1
1. char*constp;
charconst*p
constchar*p
上述三个有什么区分?
char*constp;//常量指针,p的值不能够修改
charconst*p;//指向常量的指针,指向的常量值不能够改
constchar*p;//和charconst*p
2. charstr1=“abc”;
charstr2=“abc”;
constcharstr3=“abc”;
constcharstr4=“abc”;
constchar*str5=“abc”;
constchar*str6=“abc”;
char*str7=“abc”;
char*str8=“abc”;
cout<<(str1==str2)<<endl;
cout<<(str3==str4)<<endl;
cout<<(str5==str6)<<endl;
cout<<(str7==str8)<<endl;
打印结果是什么?
解答:结果是:0011
str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域
?
voidUpperCase(charstr)//将str中的小写字母转换成大写字母
{
for(size_ti=0;i
if(‘a’<=str[i]&&str[i]<=’z’)
stri-=(‘a’-'A’);
}
charstr=“aBcDe”;
cout<<“str字符长度为:”<<sizeof(str)/sizeof(str[0])<<endl;
UpperCase(str);
cout<<str<<endl;
答:函数内的sizeof有问题。
依据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。
函数外的str是一个静态定义的数组,所以其大小为6。
函数内的str实际只是一个指向字符串的指针,没有任何额外的和数组相关的信息,所以sizeof作用于上只将其当指针看,一个指针为4个字节,所以返回4。
4. main
{
inta5={1,2,3,4,5};
int*ptr=(int*)(&a+1);
printf(“%d,%d”,*(a+1),*(ptr-1));
}
输出结果是什么?
答案:输出:2,5
*(a+1)就是a1,*(ptr-1)就是a4,实施结果是2,5
&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)
int*ptr=(int*)(&a+1);
则ptr实际是&(a5),也就是a+5
原因以下:
&a是数组指针,其类型为int(*)5;
而指针加1要依据指针类型加上一定的值,不一样类型的指针+1以后增加的大小不一样。
a是长度为5的int数组指针,因此要加5*sizeof(int)
因此ptr实际是a5
不过prt和(&a+1)类型是不一样的(这点很主要)
因此prt-1只会减去sizeof(int*)
a,&a的地址是一样的,但意思不一样
a是数组首地址,也就是a0的地址,&a是对象(数组)首地址。
a+1是数组下一元素的地址,即a1,&a+1是下一个对象的地址,即a5.
C语言指针笔试题篇2
1. 请问以下代码有什么问题:
intmain
{
chara;
char*str=&a;
strcpy(str,”hello”);
printf(str);
return0;
}
答案:没有为str分配内存空间,将会发生异常。问题出在将一个字符串复制进一个字符变量指针所指地址。即使能够正确输出结果,但因为越界进行内在读写而造成程序瓦解。
*s=”AAA”;
printf(“%s”,s);
s0=’B';
printf(“%s”,s);
有什么错?
答案: