‘壹’ C语言问题
1
答案应该是B,这个没什么好解释的(就是指针变量指向变量的地址)
2
答案应该是D 如果直接用字符串对字符数组初始化的话字符数组的长度要比实际字符串长度大1的
因为字符串在字符数组中是以'\0'结束的,这个你也可以用sizeof() 分别测试一下
我已经测试过了A比B大1的
3
答案应该是D,这个没的说,括号的作用就是避免二义
4
答案应该是C,不要把 int *ptr();搞混了,题上的是返回一个整形数据的指针函数,后者是一个
返回指针的函数
5
答案是A,呵呵,这个你好好想一下就明白了
6
答案是A 4
7
答案是23 这个你要好好看一看,特别是(&Arr+1)它和(Arr+1)区别很大,前者在地址上加了
1而后者在地址上加了1*sizeof(int);
8.
这道题你是不是搞错了,你仔细看看有很多错误的。
9.
答案是 B 为了帮助你理解,对此程序我写了段代码
#include<stdio.h>
void main()
{
void func(char str[100]);
char str[100];
printf("%d\n",sizeof(str));//答案是100
func(str);
}
void func(char str[100])
{
printf("%d\n",sizeof(str));//答案是4
}
为什么会出现这种情况呢,原因是因为两者有着本质性的区别,第一个sizeof(str)中的str是一个
地址常量,它索引着一段大小为100的内存堆,而第二个sizeof(str)中的str是一个字符指针变量
sizeof(str)的结果就是一个字符指针变量所具有的内存,它的内存应该是为4的
10
答案是D
二:
1.
错,应该放在静态存储区(或全局数据区的)
2
对
3.
对
4.
错,不可能是float 型的
5.
对
三
1. int main(void)
{
Unsigned char index = 0;//这个地方应该是unsigned int index=0;注意第一个u不能大写
While(index < 256)
{
index +=index;
index++;
}
Printf(“index value %d\n”,index);
Return 0;
}
2.
char*f()
{ //应该是static char s[4]={'0','1','2','3','\0'};
Char s[4]={‘1’,’2’,’3’,’0’};//关键字的开头是不能大写的,还有就是符号‘也不对
Return s;//ruturn 第一个字母也不能大写,
}
Void main()
{
Char *s;//应该是char 第一个字母不能大写
s=f();
printf(“%s”,s);
}
//你这道题的本意是想通过函数调用来获得一个字符串的首地址从而在主函数中输出,
//但是,有一点这个程序没有考虑到那就是当被调函数结束后那个char s[4] 所占内存将自动
//操作系统回收,因为它只是个动态局部变量,所以要想达到目的应该是声明成静态变量的
//static char s[4],还有一点错误就是字符串都要'\0'结尾否则输出的字符串的将不会是你想要的那样
3.
这道题没什么错误,能达到预期的效果,除了有几处拼写错误,例如你第一个是GetmMnory而第二个是
GetMemory这一点你注意一下就可以了
void GetMenory(char**p)
{
*p = (char*)malloc(100);
}
Void Test(void)
{
char*str = NULL;
GetMemory(&str);
strcpy(str,”hello morld”);
printf(str);
}
4.
这道题没什么语法错误,除了单引号格式不对,还有就就违反了字符串都要以'\0'结尾这一约定
5.
这道题没有什么语法错误,就是有个字符串函数写错了str,应该写成 strcpy的
四:
你这道题具体是让做什么的,我不是太明白,是让建一个动态链表啊还是静态链表啊,
请你把问题写详细点
五。
int judgment(int a[],int length )//这个函数是判断是否对称的
{
for(int i=0;i<=length/2;i++)
if(a[i]!=a[length-i])
break;
if(i==length/2+1)
return 1;
else
return 0;
}
void main(void)
{
int a[10];
int num;
printf("请输入你要检测的数\n") ;
scanf("%d",&num);
int length=0;
//这个循环是为了把整数拆开放到一个整形数组中,拆开以后放进数组里面的刚好是和正常的数
//反序的,不过这个不会影响结果的,因为只要数对称反序后一样对称,如果数不对称反序后依然不对称
do
{
int temp=num%10;
a[length]=temp;
num=num/10;
length++;
} while(num>=10);
a[length]=num;
if( judgment(a,length))
printf("是\n");
}
如果这个程序有什么不懂得话,可以提出来,随时帮你解析
希望我的答案对你有点帮助……
希望对你能有所帮助。