做外貿(mào)一般總瀏覽的網(wǎng)站策劃方案怎么做
指針操作 一維 字符數(shù)組?
1. 字符型數(shù)組 --- 存放字符串的
char s[] = "hello";
['h' ] <---0x1000
['e' ]
['l' ]
['l' ]
['o' ]
['\0']
//誰(shuí)能這塊空間的地址 --- 數(shù)組名?
s --->怎么能保存s所代表的地址值?
? ? ?//s數(shù)組名 --- 數(shù)組首元素的地址 &s[0]
? ?--->地址的類(lèi)型?
? ? ? ?char *?
?? ? ??
char *p = s; //指針變量p 指向了 s (數(shù)組)
int puts(const char *s);
注意:
? ?char s[] = "hello"; //s的空間開(kāi)在 棧上?
? ?char *s1 = "hello"; //s1的空間開(kāi)在棧上,但是s1指向的"字符串常量"
? ? ? ? ? ? ? ? ? ? ? ?//存放"字符串常量區(qū)"
?? ??? ??? ??? ??? ? ??
?? ??? ??? ??? ??? ? ??
? *s1 = *s1 - 32; //不能做 ? 原因是 s1 指向的數(shù)據(jù)是在 字符串常量區(qū)
? ? ? ? ? ? ? ? ? //常量區(qū)的數(shù)據(jù)不能修改?
?? ??? ??? ??? ? ?
? const int a = 10; //a成了只讀變量?
??
??
? const char * s1 = "hello"; ? //表示 將 *s1 限定為只讀
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//如果,不希望修改 *s1 的數(shù)據(jù)
?? ??? ??? ??? ??? ??? ??? ? ? //一般 建議加上const?
?? ??? ??? ??? ??? ??? ??? ? ??
? char * const s1 = "hello"; ?//const 離誰(shuí)近,就是限定誰(shuí)的?
??
? char const *s1 = "hello"; //此時(shí) 還是 *s1 不能被修改 ?
? int *p; //int 代表基類(lèi)型?
? ? ? ? ? //p 本身 ??
? char const * const s1 = "hello"; // *s1 和 s1 本身都不能被修改?
??
??
總結(jié):
? 1.const 離誰(shuí)近,就限定誰(shuí)?
? 2.const 修飾的變量,為只讀變量 //變量還是變量 只是成了只讀的?
??
??
?
實(shí)現(xiàn):
int Puts(char *s)
{
? ?*s = 'a'; //編譯時(shí),不報(bào)錯(cuò)?
}
int Puts(const char *s)
{
? ?*s = 'a'; //編譯時(shí),就會(huì)報(bào)錯(cuò)?
}
const char *s // *s 這種方式修改不了數(shù)據(jù)?
形參設(shè)計(jì):
什么時(shí)候需要加const?
1.如果函數(shù)內(nèi)部本身不需要通過(guò)*s 修改外面的數(shù)據(jù)?
此時(shí),建議 統(tǒng)統(tǒng)加上const?
好處:
? ?1.可以將 錯(cuò)誤提前 到 編譯時(shí) 發(fā)現(xiàn)?
? ?2.提高了參數(shù)的適用性?
? ? ?可以接收數(shù)組名
?? ? 也可以接收 字符串常量 ?//const char *?
?? ??
練習(xí):
? ?strlen
? ?
? ?int Strlen(const char *s)?
? ?{
? ?}
? ?
? ?size_t Strlen(const char *s)
? ?{
? ?
? ?}
? ?
? ?
練習(xí):
? ?Strcpy(char *dest,const char *src)
? ?
? ?
? ?
?
?? ? ?char *Strcpy(char *dest, const char *src)
?? ? ?{?
?? ??? ??? ?char *ret = dest;
?? ??? ??? ?...拷貝過(guò)程?
?? ??? ??? ?
?? ??? ??? ?return ret;?
?? ? ?}
?? ? ?返回值:
?? ? ? ? ?成功 表示的是dest的首地址?
?? ??? ? ?返回值設(shè)計(jì)成char * 是為了實(shí)現(xiàn) 字符串鏈?zhǔn)讲僮?
?? ??? ? ?
? ? ? ?
?? ? ?char *strncpy(char *dest, const char *src, size_t n);
?? ? ?功能?
?? ? ? ? ?將src中的前n個(gè)字節(jié)拷貝到 dest中?
?? ? ?注意:
?? ? ? ? ?src 長(zhǎng)度 > n ? ? 此時(shí)將前n個(gè)字節(jié)拷過(guò)去,此時(shí)dest也不會(huì)拷過(guò)去'\0'
?? ??? ? ?src 長(zhǎng)度 < n ? ? 此時(shí)將src拷貝完成后,繼續(xù)拷貝(添加的是'\0')直到完成了n次拷貝
? ? ?char * Strncpy(char *dest,const char *src, size_t n)
? ? ?{
?? ? ? ?//這個(gè)函數(shù),拷貝過(guò)程,n來(lái)控制?
?? ??? ?
?? ? }?? ??
?? ??? ?
? ?char src[] = "hello";
? ?strncpy(dest,src,10); //
? ?
練習(xí):
? ?strcat?
? ?
? ?
? ? ? ?char *strcat(char *dest, const char *src);
? ? ? ?功能:
?? ? ? ? ? 拼接字符串?
?? ??? ? ??
?? ? ? 實(shí)現(xiàn): //返回值 表示的是dest 存放字符串的空間的首地址?
?? ? ? ?char *Strcat(char *dest, const char *src)
?? ??? ?{ ?
?? ??? ? ? ?char *ret =dest;
?? ??? ? ? ?//1.先定位到 dest 的 '\0'的位置?
?? ??? ??? ?//2.從dest的 '\0'位置開(kāi)始,拷貝字符串?
?? ??? ??? ?//3.最終dest中 需要有 '\0'結(jié)束標(biāo)志?
?? ??? ??? ?return ret;
?? ??? ?}
? ? ? ?
?? ? ? char *strncat(char *dest, const char *src, size_t n)
?? ? ? 功能:
?? ? ? ? ? ?將 src中的前 n 個(gè)字符拷貝過(guò)去?
?? ? ? ?注意:
?? ??? ? ? 始終保證 dest中是一個(gè)字符串 ('\0')結(jié)束標(biāo)志的?
?? ??? ? ? //使用時(shí),需要確保dest空間足夠?
?? ??? ? ??
?? ??? ? ??
?? ? ?char * Strncat (char *dest, const char *src, size_t n)
?? ? ?{
?? ? ? ? ? ? char *ret =dest;
?? ??? ? ? ?//1.先定位到 dest 的 '\0'的位置?
?? ??? ??? ?//2.從dest的 '\0'位置開(kāi)始,拷貝字符串 ?//受到n的控制 ?
?? ??? ??? ?//3.最終dest中 需要有 '\0'結(jié)束標(biāo)志 ?
?? ??? ??? ?return ret;
?? ? ?}
?? ? ?
-----------------------------------------
? Strcmp(const char *s1,const char *s2)
? ?
? int Strcmp(const char *s1, const char *s2)
? {
? ? ?功能:
?? ? ? ?從左到右,逐個(gè)字符比較?
?? ??? ?
?? ??? ?遇到不同的字符時(shí)結(jié)束 或者 遇到 '\0'
?? ??? ?
?? ??? ?返回 最終不同的字符的差值?
? }
??
? int strncmp(const char *s1, const char *s2, size_t n);
??
??
? strncmp("hello","helloa",3); //
??
??
? ?int Strncmp(const char *s1, const char *s2, size_t n)
? ?{
?? ? ? 功能:
?? ? ? ?從左到右,逐個(gè)字符比較?
?? ??? ?
?? ??? ?遇到不同的字符時(shí)結(jié)束 或者 遇到 '\0' ?n個(gè)比完也停
?? ??? ?
?? ??? ?返回 最終不同的字符的差值?
? ? ??
? ?}
----------------------------------------------------------
總結(jié):
? ?指針操作一維數(shù)組?
? ?
? ?思路,
? ?通過(guò)指針變量 獲得數(shù)組所在空間的地址?
? ?
? ?int a[10];
? ?int *p = a;
? ?
? ?*(p+i) <=> a[i]
? ?函數(shù)實(shí)現(xiàn)的?
? printArray(int *a,int len)
? {
? ? ?
? } ?
??
? Puts(const char *s)
? {
? ? ?
? }
??
?
?
---------------------------
指針 操作 二維數(shù)組?
int a[3][4] = {1,2,3,4,5,6,7,8,9};
a 還是首元素的地址?
? a[0]
? a[0][0]
int[4] a[3]; ?//a數(shù)組名 -- &a[0]?
a<=>&a[0] //值的角度?
? ? a[0] //數(shù)據(jù)類(lèi)型 int[4]?
? ? &a[0] //int[4] * 指針類(lèi)型?
?? ? ? ? ?//標(biāo)準(zhǔn)C語(yǔ)法: int (*)[4]
?? ??? ? ?
定義變量:
int (*p)[4]; //數(shù)組指針
? ? ? ? ? ? ?//基類(lèi)型 int[4]這種類(lèi)型 ---數(shù)組類(lèi)型?
? ? ? ? ? ? ??? ??? ??? ??
*p //等價(jià)與 a[0]?
? ?//相當(dāng)于是 int[4] 這個(gè)一維數(shù)組的數(shù)組名?
? ?
*(*(p+0)+0) <=> a[0][0]
*(*(p+i)+j) <=> a[i][j]
?