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。 思路夠清晰了吧。不懂再追問。