1. c语言如何 把结构体内的变量的值互换
同类型结构体间可以直接赋值
struct phoneinfor s1,s2,temp;
temp=s1;
s1=s2;
s2=temp;
你这个不行:
if(strcmp(phonebook[j].name,phonebook[j+1].name)>0)
{
phonebook3=phonebook[j];
//phonebook3是phoneinfor3类型的,你得把它定义为phoneinfor类型的
phoneinforphonebook[j]=phonebook[j+1];
phonebook[j+1]=phonebook3;
}
2. C语言在一个函数里面定义了一个结构体,怎么在另外一个函数里面使用
在另外一个函数里面使用的源代码如下:
#include"stdio.h"
#include "conio.h" //-------添加这个头文件,因为getch()函数来自它,否则编译会有警告
struct student /*定义结构体*/
{
void main()
{
void data_in(struct student putin[]);
void data_out(struct student *p);
void data_pout(struct student *s1);
data_in(pers); /*调用指针输入函数*/
data_out(sp); /*调用指针输出函数*/
data_pout(sp); /*调用函数名输出函数*/
getch();
}
(2)结构体c语言交换s1和s2扩展阅读
1、函数是C语言的基本组成元素,当我们调用一个函数时,需要明确函数名和实参列表。实参列表中的参数可以是常量、变量、表达式或者空,并且各参数之间要使用英文逗号分隔开来。
2、在C语言中,函数的定义是独立的,一个函数不能定义在另一个函数内部。但在调用函数时,可以在一个函数中调用另一个函数,这就是函数的嵌套调用。接下来我们通过一个案例来演示函数的嵌套调用。
3. C语言:从键盘输入两个字符串s1与s2,并在s1串中的最大字符后边插s2
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
void main(void){
char s1[400]="",s2[400]="",mch;
int i,j,k,sub;
printf("Type a string...\ns1=");
gets(s1);
printf("Type another...\ns2=");
gets(s2);
for(mch=i=0;s1[i];i++)
if(mch<s1[i]){
sub=i;
mch=s1[i];
}
strcats2,s1+sub+1);
s1[sub+1]='\0';
strcat(s1,s2);
printf("The result is %s\n",s1);//Look at it.
}
4. C语言中怎样实现将读入的字符串S1复制给S2
#include
void
main()
{int
i;
char
s1[20],s2[20];
printf("enter
sring1");
gets(s1);
for(i=0;s1[i]!='\0';i++);//是否读到字符串结束标志,没读到继续,否则结束循环.
s2[i]=s1[i];//没读到字符串结束标志时,将对应位置的s1中的字符赋值给s2
s2[i]='\0';
printf("string2:%s\n",s2);//输出的一定是s2
getch();
}
5. c语言关于结构体长度的问题
. 结构体的sizeof这是初学者问得最多的一个问题,所以这里有必要多费点笔墨。让我们先看一个结构体:struct S1{char c;int i;};问sizeof(s1)等于多少聪明的你开始思考了,char占1个字节,int占4个字节,那么加起来就应该是5。是这样吗你在你机器上试过了吗也许你是对的,但很可能你是错的!VC6中按默认设置得到的结果为8。Why为什么受伤的总是我请不要沮丧,我们来好好琢磨一下sizeof的定义——sizeof的结果等于对象或者类型所占的内存字节数,好吧,那就让我们来看看S1的内存分配情况:S1 s1 = { 'a', 0xFFFFFFFF };定义上面的变量后,加上断点,运行程序,观察s1所在的内存,你发现了什么以我的VC6.0为例,s1的地址为0x0012FF78,其数据内容如下:0012FF78: 61 CC CC CC FF FF FF FF发现了什么怎么中间夹杂了3个字节的CC看看MSDN上的说明:When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment.原来如此,这就是传说中的字节对齐啊!一个重要的话题出现了。为什么需要字节对齐计算机组成原理教导我们这样有助于加快计算机的取数速度,否则就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本数据类型(int等)都位于能被4整除的地址上,以此类推。这样,两个数中间就可能需要加入填充字节,所以整个结构体的sizeof值就增长了。让我们交换一下S1中char与int的位置:struct S2{int i;char c;};看看sizeof(S2)的结果为多少,怎么还是8再看看内存,原来成员c后面仍然有3个填充字节,这又是为什么啊别着急,下面总结规律。字节对齐的细节和编译器实现相关,但一般而言,满足三个准则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。对于上面的准则,有几点需要说明:1) 前面不是说结构体成员的地址是其大小的整数倍,怎么又说到偏移量了呢因为有了第1点存在,所以我们就可以只考虑成员的偏移量,这样思考起来简单。想想为什么。结构体某个成员相对于结构体首地址的偏移量可以通过宏offsetof()来获得,这个宏也在stddef.h中定义,如下:#define offsetof(s,m) (size_t)&(((s *)0)->m)例如,想要获得S2中c的偏移量,方法为size_t pos = offsetof(S2, c);// pos等于4
6. c语言,用指针实现读入字符串s,s1,s2,如果s1是字符串s的子串,则用s2替换s中的s1,并且打印结果字符串
这是我自己写的程序。满足你的要求,我在vc6里面通过调试运行,并且用3个字符串测试结果符合你的题目
#include<stdio.h>
#include<string.h>
main()
{
char *s=(char*)malloc(80),*s1=(char*)malloc(80),*s2=(char*)malloc(80);
int i,j,k;
printf("s=");
gets(s);
printf("s1=");
gets(s1);
printf("s2=");
gets(s2);
for(i=0;*(s+i)!='\0';i++)
{
for(j=i,k=0;(*(s+j)!='\0')&&(*(s1+k)!='\0')&&(*(s+j)==*(s1+k));j++,k++);
if(k==strlen(s1))
{
for(j=i,k=j+strlen(s1);k<strlen(s);k++,j++)
*(s+j)=*(s+k);
*(s+j+strlen(s2))='\0';
for(j=--j+strlen(s2),k=j-strlen(s2);k>=i;j--,k--)
*(s+j)=*(s+k);
for(j=i,k=0;*(s2+k)!='\0';j++,k++)
*(s+j)=*(s2+k);
}
}
printf("then\ns=");
puts(s);
}
7. c语言 请问输入一个字符串s1和另一个字符串s2如果s1包含s2输出YES否则输出NO,请高手指点
#include <stdio.h>
#include <string.h>
void main()
{
char s1[20],s2[20];
printf("请输入字符串s1,s2\n");
scanf("%s%s",s1,s2);
if(strstr(s1,s2)!= NULL)
{
printf("YES");
}
else
{
printf("NO");
}
system("pause");
}
有些有用的函数得知道,不一定记住,但是用的时候能查到就可以了。
8. c语言问题,不知道为什么s1,s2的值调换不了,求高手指教:
#include<stdio.h>
voidswap(char**x,char**y)
{
char*t;t=*x;*x=*y;*y=t;
}
main()
{
char*s1="abc",*s2="123";
swap(&s1,&s2);
printf("%s,%s ",s1,s2);
}
9. c语言交换结构体
#include<stdio.h>
struct stu
{
long num;
}
*student[2];
void main()
{
struct stu *a;
student[0] = (struct stu*)malloc(sizeof(struct stu));
student[0]->num=0;
student[1] = (struct stu*)malloc(sizeof(struct stu));
student[1]->num=1;
a = student[0];
student[0] = student[1];
student[1] = a;
printf("student[0].num=%d\n",student[0]->num);
printf("student[1].num=%d\n",student[1]->num);
}
10. c语言编程输入两个字符串S1,S2,用指针实现将字符串S2的内容连接到S1的末尾.
这样简单解释一下吧,前面都没问题吧,就mystrcat函数里面,你看它有两个参数对吧,然后又定义了一个str,先让str指向str1,用while循环输出str1,输出完后进入第二个while循环str继续++ ,不过就把str2地址赋给它了,等于第二个while循环就输出了str2。 思路够清晰了吧。不懂再追问。