①字符串二:
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;
⑩ 多级指针 略