c语言二级,结构体的替换,救救孩子吧
#include <stdio.h>#include <stdlib.h>
#include <string.h>
typedef struct stu
{
char *name,gender;
int score;
} STU;
void f(char*p)
{
p=(char *)malloc(10) ;
strcpy(p,"Qian");
}
main()
{
STU a={NULL,'m’', 290} ,b;
a.name=(char *)malloc(10);
strcpy ( a.name,"Zhao");
b = a;
f(b.name);
b.gender = 'f’ ; b.score = 350;
printf("%s,%c, %d,",a. name,a.gender,a.score) ;
printf("%s,%c,%d\n", b.name,b.gender,b.score) ;
}
则程序的输出结果是( )。
A. Zhao,m,290,Qian,f,350
B. Zhao,m, 290, Zhao,f,350
C. Qian,f,350,Qian, f, 350
D. Qian, m,290,Qian,f[逗号 ]350
【您的选择】B 恭喜您答对了!
【题目解析】
本题的考查点是结构体的运用。本题定义了两个结构体变量a和b,并为a赋予了新值;语句b=a是将结构体变量a的内容赋给了结构体变量b,对于结构体的赋值,意味着将其中的每一个元素都进行赋值,执行f (b.name)时,调用f函数,在f函数体中给p开辟了一个新的空间,在新的空间里的*p=Qian,但对主函数无任何影响,语句又为b中的gender和score元素赋予了新值,b.gender = 'f’; b.score = 350 ; 。故本题答案为B。
我选的A。经过f函数之后不应该被替换了吗{:10_319:}
哇,这代码格式
兄弟你想学会C语言吗?把代码写成这样是学不会C语言的
如果不想学会C语言,只是想要通过考试的话那问题就简单了
直接背答案就可以了,你管他什么原理了,背过就能考过,就是这样
f函数这样写是无法修改变量p指向的字符串的
C语言函数调用的参数是值传递,就是把这个变量复制一份然后传递给函数
指针要解引用才能修改调用者传递过来的变量
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct stu {
char *name;
char gender;
int score;
} STU;
/*
void f(char *p) {
p = (char *)malloc(10);
strcpy(p, "Qian");
}
*/
//void f(char *p) {
void f(char **p) {
*p = (char *)malloc(10);
strcpy(*p, "Qian");
}
// main()
int main(void) {
//STU a = {NULL, 'm’', 290}, b;
STU a = {NULL, 'm', 290}, b;
a.name = (char *)malloc(10);
strcpy(a.name, "Zhao");
b = a;
f(&b.name);
//b.gender = 'f’ ; b.score = 350;
b.gender = 'f';
b.score = 350;
printf("%s,%c, %d,", a.name, a.gender, a.score);
printf("%s,%c,%d\n", b.name, b.gender, b.score);
return 0;
}
人造人 发表于 2022-7-25 21:38
哇,这代码格式
兄弟你想学会C语言吗?把代码写成这样是学不会C语言的
如果不想学会C语言,只是想要通过 ...
大学不是c语言编程的相关专业,完全就是兴趣{:10_262:},我有个初中同学在学单片机,有一次同学聚会了解到了,他还给了我些单片机和些模块,我就想学学c语言,感觉单片机很好玩,然后在学校又没多少时间学,都是寒暑假,去年寒假和今年暑假在学,报了个c语言考试,鞭策一下自己。寒假把小甲鱼的远古c语言视频看了一遍,知道了一下简单的语法知识,这个暑假继续学,看书,刷二级题。想先定个底子,以后工作了,稳定了再来慢慢学,当个爱好也不错。 人造人 发表于 2022-7-25 21:44
哇塞,谢谢大佬,太感动了{:5_100:} 丘陵山地 发表于 2022-7-25 21:49
大学不是c语言编程的相关专业,完全就是兴趣,我有个初中同学在学单片机,有一次同学聚会了解 ...
学编程的第一件很重要的事是 把代码写好,代码格式真的很重要
学了一遍C语言后,就先学汇编语言,然后再学一遍C语言
毕竟你是想要学好C语言
要学好C语言你就必须能够从汇编语言的角度看C语言
人造人 发表于 2022-7-25 21:55
学编程的第一件很重要的事是 把代码写好,代码格式真的很重要
学了一遍C语言后,就先学汇编语言,然后再 ...
嗯嗯,以后准备看一下小甲鱼的汇编{:5_109:} 人造人 发表于 2022-7-25 21:55
学编程的第一件很重要的事是 把代码写好,代码格式真的很重要
学了一遍C语言后,就先学汇编语言,然后再 ...
谢谢大佬,C语言引路人{:10_298:} 另外,值得一提的是这个代码,我注释掉了第20行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct stu {
char *name;
char gender;
int score;
} STU;
/*
void f(char *p) {
p = (char *)malloc(10);
strcpy(p, "Qian");
}
*/
//void f(char *p) {
void f(char **p) {
//*p = (char *)malloc(10);
strcpy(*p, "Qian");
}
// main()
int main(void) {
//STU a = {NULL, 'm’', 290}, b;
STU a = {NULL, 'm', 290}, b;
a.name = (char *)malloc(10);
strcpy(a.name, "Zhao");
b = a;
f(&b.name);
//b.gender = 'f’ ; b.score = 350;
b.gender = 'f';
b.score = 350;
printf("%s,%c, %d,", a.name, a.gender, a.score);
printf("%s,%c,%d\n", b.name, b.gender, b.score);
return 0;
}
人造人 发表于 2022-7-25 22:02
另外,值得一提的是这个代码,我注释掉了第20行
好嘞好嘞,我仔细研究一下{:10_323:} 人造人 发表于 2022-7-25 21:44
时隔一个月我又看不懂了
void f(char **p)
{
*p = (char *)malloc(10);
strcpy(*p, "Qian");
}
其中strcpy(*p, "Qian")。*p不是一个地址吗,还能把值传给地址吗?不应该是strcpy(**p, "Qian")。我晕了。指针没学好T_T
那岂不是可以写成
void f(char *p)
{
p = (char *)malloc(10);
strcpy(*p, "Qian");
}} 丘陵山地 发表于 2022-8-28 08:58
时隔一个月我又看不懂了
void f(char **p)
{
因为p的类型是 char **
所以 *p 的值是一个地址
*p是一个地址,可以把*p的值传给strcpy
**p的值就是一个字符了
指针没学好?学了汇编语言以后再学一遍C语言试试
人造人 发表于 2022-8-28 12:52
因为p的类型是 char **
所以 *p 的值是一个地址
*p是一个地址,可以把*p的值传给strcpy
strcpy函数不就是字符串传给另一个字符串吗?
void f(char **p)
{
*p = (char *)malloc(10);
strcpy(*p, "Qian");//这里*p是地址,Qian是字符串,字符串还可以替换地址???用Qian去替换0x1133?
}
我在网上也没搜到strcpy与指针的用法,T-T😫,难道是真的可以这样? 丘陵山地 发表于 2022-8-29 10:29
strcpy函数不就是字符串传给另一个字符串吗?
void f(char **p)
strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。
这个地址空间就是指针吗 丘陵山地 发表于 2022-8-29 10:31
strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地 ...
#include<string.h>
#include <stdio.h>
void main()
{
char a, c[] = "I am a teacher!";
strcpy(a, c);
printf(" c=%s\n", c);
printf(" a=%s\n", a);
}
那像这种我又咋理解呢,c[]是字符串,a是地址,也相当于指针?? 丘陵山地 发表于 2022-8-29 10:34
#include
#include
void main()
a和c都是地址
人造人 发表于 2022-8-29 10:54
a和c都是地址
void f(char **p)
{
*p = (char *)malloc(10);
strcpy(*p, "Qian");//这里*p是地址,Qian是字符串,字符串还可以替换地址???用Qian去替换0x1133?
} 丘陵山地 发表于 2022-8-29 11:23
void f(char **p)
{
*p = (char *)malloc(10);
"Qian" 是地址
是 const char * 类型的地址
人造人 发表于 2022-8-29 11:24
"Qian" 是地址
是 const char * 类型的地址
谢谢大佬,我现在有点明白了{:10_323:}
页:
[1]