创客学院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;

⑩ 多级指针 略

猜你喜欢

转载自blog.csdn.net/weixin_42068537/article/details/83479124