chars1 hello 與char s2hello 這兩種定義字串的方法有什麼不一樣的效果

時間 2022-09-04 03:22:02

1樓:long周

兩者的區別懸殊!

char *s1="hello"這個是乙個字串常量,你可以像乙個字元陣列一樣使用它,但是你不能更改這個字串的值比如 s1[2]='e'這樣不行,

char s2="hello";是乙個字串變數,可以被修改。

不過,這兩者再作函式的形參的時候是完全等價的。

void function(char *pstr);

void function(char pstr);

可以相當絕對的說這兩種完全等價,沒有任何區別。

2樓:匿名使用者

前者是指向字串的指標,後者是字元陣列。但是在實際使用中,陣列名指向了陣列的第乙個字元,從這一點來說,二者並沒有本質的區別。

3樓:徘徊向前

第乙個是指標形式的 第二個是一般的陣列 就效果來說是一樣的 第乙個可以用指標引用 在應用的時候會有一些小的區別 如 scnaf(%d,s2 )

4樓:匿名使用者

你好:讓我來深入淺出的回答這個問題,讓你能徹底明白的;

(1)"hello"是什麼?

它是乙個字串常量,注意字串在c語言中是沒有變數一說的,

(2)"hello"在記憶體中如何存放?

它象一般的陣列一樣,沒每乙個記憶體小格仔存放乙個字母,這樣順序排下來,很顯然字母h就是頭

(3)char *s 是什麼?

很顯然它就是乙個指標變數,這個s就是用來存放字元位址的,在我們這裡,它就存放了字元h的記憶體位址!!也就是這個字串的首位址。

(4)有了這個首位址我們輸出的時候,首先找到首位址,然後依次讀出後面的字元,直到遇到'\0'結束,所以你可想而知,這個字串的長度就是6,因為系統自動加上了『\0'

(5)char s2="hello"是什麼?

它就是乙個名字是s2的字元陣列,存放了h,e,l,l,o,這5個字元,很顯然它的長度是5,這也正是和前者的區別所在.

呵呵,打完收工

祝你好運!

編寫乙個函式char *link(char *s1,char *s2),實現字串s1與s2的交叉連線,連線後得到的新字串放在s1中

5樓:匿名使用者

#include

char *link(char *,char *);

void main( )

char *link(char *a,char *b)else if(i

}else if(j

}for(i =0;i

*(a+i) = *(c+i);

*(a+i) = '\0';

return a;

} // 思想簡單,所以**寫得有點淤長,但是是能夠解決問題的。

// 並且要注意gets、puts函式對於字串的處理是以null或者'\0'結束的。

6樓:匿名使用者

#include

char *strcat(char *s1, const char *s2)

int main()

c語言編寫函式實現兩個字串比較(其功能與標準函式strcmp一樣)函式原型int mystrcpy(char*s1,char*s2)

7樓:

以下**就可解決此問題:

//#include "stdafx.h"//if the vc++6.0, with this line.

#include "stdio.h"

int mystrcmp(const char *s1,const char *s2)

int main(void){//測試一下char a="12378",b="1233467890",f;

if((f=mystrcmp(a,b))>0)printf("a>b\n");

else if(f<0)

printf("a

8樓:匿名使用者

int mystrcmp(char *s1, char *s2)

return *s1-*s2;}

編寫取子字串函式void fun(char s1[],char s2[],int m,int n),其作用是將字元陣列s2中從第m個字元開始

9樓:匿名使用者

#include

void fun(char s1,char s2,int m,int n)

void main()

10樓:

for (;m<

*s1++ = *s2++;

11樓:

void fun..}

char s1hellochar s2hello 這兩個C語言句有什麼區別

你好 讓我來深入淺出的回答這個問題,讓你能徹底明白的 1 hello 是什麼?它是乙個字串常量,注意字串在c語言中是沒有變數一說的,2 hello 在記憶體中如何存放?它象一般的陣列一樣,沒每乙個記憶體小格仔存放乙個字母,這樣順序排下來,很顯然字母h就是頭 3 char s 是什麼?很顯然它就是乙個...