union { char aStr;short sNum;int nmu;} MsgType; char str[ ] = "Hello";char *p = str ; 请计算: sizeof(MsgType)= 【 】 sizeof(str) = 【】 ;strlen(p) = 【 】 ;
时间: 2023-06-18 08:02:26 浏览: 152
根据联合体的定义,它的大小应该等于其最大成员的大小,即 $sizeof(MsgType) = sizeof(int) = 4$。
由于字符串 "Hello" 由 6 个字符组成,包括一个空字符 '\0',所以数组 str 的大小应该为 $sizeof(str) = 6$。
指针变量 p 指向字符串 "Hello" 的首字符,所以 strlen(p) 应该返回字符串的长度,即 $strlen(p) = 5$。注意,不包括空字符 '\0'。
相关问题
#include<stdio.h>#include<string.h>struct student{int snum;char name[8];int score[3];float sum;}void sumScore(struct student temp){ struct student *p; p=&temp; (*p).snum=0; for(int i=0;i<3;i++) { (*p).snum+=(*p).score[i]; }}main(){ struct student a[5]; printf("请输入五个学生的学号,姓名和三门课成绩\n"); for(int i=0;i<5;i++) { scanf("%d%s",&a[i].snum ,a[i].name); printf("%d %s ",a[i].snum ,a[i].name); for(int j=0;i<3;i++) { scanf("%d",&a[i].score[j] ); printf("%d ",a[i].score[j]); } printf("\n"); } for(i=0;i<5;i++) { sumScore(a[i]); }}
这段代码存在一些问题,可能会导致编译错误或者运行错误。
1. 在结构体定义中,需要在最后一个成员变量后面加上分号。
2. 在 sumScore 函数中,传入的参数是一个结构体,应该使用指针来进行操作。因此,应该将函数定义改为 void sumScore(struct student *temp)。
3. 在 sumScore 函数中,应该使用指针箭头运算符 -> 来访问结构体成员变量。
4. 在 for 循环中,内部的循环变量应该是 j 而不是 i。
5. 在主函数中,i 没有进行声明。
下面是修改后的代码:
```
#include <stdio.h>
#include <string.h>
struct student {
int snum;
char name[8];
int score[3];
float sum;
};
void sumScore(struct student *temp) {
temp->snum = 0;
for (int i = 0; i < 3; i++) {
temp->snum += temp->score[i];
}
}
int main() {
struct student a[5];
printf("请输入五个学生的学号,姓名和三门课成绩\n");
for (int i = 0; i < 5; i++) {
scanf("%d%s", &a[i].snum, a[i].name);
printf("%d %s ", a[i].snum, a[i].name);
for (int j = 0; j < 3; j++) {
scanf("%d", &a[i].score[j]);
printf("%d ", a[i].score[j]);
}
printf("\n");
}
for (int i = 0; i < 5; i++) {
sumScore(&a[i]);
}
return 0;
}
```
int count(STUDENT *p,int snum) { int sum=0; int i; for(i=0;i<N;i++) if((p+i)->score>=snum) { sum++; printf("%10s %d\n",(p+i).no,(p+i).score ); } return sum; }
这段代码是一个计算成绩大于等于snum的学生人数的函数,其中参数p是一个指向STUDENT类型的指针,snum是一个整数,表示成绩的下限。函数会遍历p指向的数组,对于每个成绩大于等于snum的学生,打印该学生的学号和成绩,并将总人数加1。最后返回总人数。但是,代码中有一处错误,应该将`(p+i)->no`改为`(p+i)->name`,因为STUDENT类型中应该是有一个name成员来表示学生的姓名。
阅读全文