創客學院9天C語言四
①字串二:
strcasecmp忽略大小寫比較字串
strncmp(p,p1,n)比較指定長度字串
strchr(p,c)在字串中查詢指定字元
strstr(p,p1)查詢字串:
char s [] = “how are you”;
char subs = “are”;
printf ("%d\n",strstr (s,subs)-s);結果為4
isalpha()檢查是否為字母字元
isupper()大寫
islower()小寫
isdigit()數字
②指標:
記憶體單元的地址成為指標,專門用來存放地址的變數為指標變數。
<儲存型別> <資料型別> *<指標變數名>
char *pName
睜眼看了23年世界,越發認識自己的渺小;
歷史長河億分之一,你要很努力啊!
指標佔多少位元組,作業系統決定。
int a [20],*pa;
pa = a; //等價pa = &a [0]
兩指標相減得出一個整數值,表示相隔的資料個數。
①
#include <stdio.h> int main(void) { int a, b, i = 7; i++; //等價於i = i + 1; ++i; //等價於i = i + 1; a = i++; //等價於a = i; i = i + 1; b = ++i; //等價於i = i + 1; b = i; printf("a = %d, b = %d\n", a, b); return 0; } a = 9, b = 11
②
#include <stdio.h> int main(void) { int a = 5; int *p = &a; int b = (*p)++; //等價於b = a++; 即b = a; a = a + 1; int c = ++(*p); //等價於c = ++a; 即a = a + 1; c = a; printf("b = %d, c = %d\n", b, c); printf("(*p)++ = %d, ++(*p) = %d\n", (*p)++, ++(*p)); return 0; } b = 5, c = 7 (*p)++ = 8, ++(*p) = 8
③
#include <stdio.h>
int main(void)
{
int arr[] = {1, 2, 3, 4};
int *p = arr;
int a = *p++; //等價於a = *(p++); 即a = *p; p = p + 1;
int b = *++p; //等價於b = *(++p); 即p = p + 1; b = *p;
printf("a = %d, b = %d\n", a, b);
return 0;
}
a = 1, b = 3
④
設指標變數px的地址值等於陣列指標x(即指標變數px指向陣列的首元數,則:
)x[i]、(px+i)、(x+i)和px[i]具有完全相同
的功能:訪問陣列第i+1個數組元素。
⑤陣列互換
{int a[]= {3,2,4,5,3,2,1};
int *p,*q,n,t;
n = sizeof (a) / sizeof (int);
p = a ;
q = &a[n-1];
while (p<q)
{
t = *p;
*p = *q;
*q = t;
p++;
q--;
}
for (t=0;t<n;t++)
printf ("%d",a[t]);
puts ("");
}
⑥指標與二維陣列
二維陣列名代表陣列的起始地址,陣列名加1,是移動
一行元素。因此,二維陣列名常被稱為行地址。
例:
int a[3][2] = {{2,3},{2,6},[6,5}};
int * p,i,n;
n = sizeof (a)/ sizeof (int);
printf ("%p %p\n",a,a+1);// 輸出地址間隔一行的大小。c8,d0.
printf ("%p %p\n",*a,*a+1);// 同a[0],a[1].輸出為元素地址間隔四個位元組.c8,cc.
⑦行指標
儲存行地址的指標變數。形式如下:
<儲存型別> <資料型別> (*<指標變數>)[表示式]
int a[2][3];int (*p)[3].
例:
int a[3][2] = {{2,3},{2,6},[6,5}};
int (*p)[2];
p = a;
printf ("%d %d %d %d\n",a[1][1],p[1][1],*(*(a+1)+1),*(*(p+1)+1));
列印結果皆為a[1][1].6
⑧字元指標和字串
▲當一個字元指標指向一個字串常量時,不能修改指標指向的物件的值。
char * p = “Hello ”;
*p = ‘h’; 錯誤
▲
初始化字元指標是把記憶體中字串的首地址賦予指標,並不是把該字串複製到
指標中
char str[] = “hello world”;
char *p = str;
▲字串的連線
int main (int argc,char *arg[])
{
char ch[100] = "welcome";
char * p = "hello world";
int i = 0;
while (*(ch+i) != '\0')
i ++;
while (*p != '\0')
{
*(ch+i) = *p;
i++;
p++;
}
*(ch+i) = *p;
puts(ch);
puts(p);
}
▲
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] = "hello";
int len = strlen(str),i;
// 直接輸出字串
printf ("%s\n",str);
// 每次輸出一個字元
for (i=0;i<len;i++)
{
printf ("%c",str[i]);
}
printf ("\n");
return 0;
}
⑨指標陣列
<儲存型別> <> <>
double * pa[2],a[2][3];
pa[0]=a[0];// 等價pa[0] = &a[0][0];
pa[1]= a[1]; //等價於pa[1]=&a[1][0];
▲
int * p[3];
int a[] = {3,4,3,2,5,3};
p[0] = a;
p[1] = a+1;
p[2] = a+2;
printf ("%d %d %d\n",a[0],a[1],a[2]);
printf ("%d %d %d\n",*(p[0]),*(p[1]),*(p[2]));
return 0;
⑩ 多級指標 略