1、判断大端存储&小端存储
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a = 0x12345678;
char *p = &a;
if(*p = 0x78) printf("min\n");
else if(*p = 0x12) printf("max\n");
return 0;
}
2、指针和字符串、字符数组
#include<stdio.h>
int main(int argc, const char *argv[])
{
char str[] = "hello";
char *p = str;
printf("%s\n",p);
for(int i = 0; i < 6; i++)
printf("%c\n",*(p+i));
*p = 'a';
printf("%c\n",*p);
char *p1 = "hello www";
char *p2 = "hello www";
printf("%p\n",p1);
printf("%p\n",p2);
return 0;
}
3、删除字符串中的下划线
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char str[] = "ab_cd_a_";
int len = strlen(str),i,j;
i = 0;
while(str[i])
{
if(str[i] == '_')
{
for(j = i; j < len; j++)
str[j] = str[j+1];
}
i++;
}
puts(str);
return 0;
}
4、终端输入带空格的字符串,判断所含单词数
#include<stdio.h>
#include<string.h>
int main()
{
char str[81];
int i,num=0,word=0;
gets(str);
for(i=0;i< strlen(str);i++)
{
if(str[i]==' ')
word=0;
else if(word==0)
{
word=1;
num++;
}
}
printf("%d\n",num);
}
5、用指针实现strlen,strcmp,strcpy,strcat
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char s[] = "hjkla";
char *p = s;
//strlen
int len = 0;
while(*p)
{
len++;
p++;
}
printf("%d\n",len);
//strcpy
p = s;
char s1[20] = {"hi"};
char *p1 = s1;
for(int i = 0; i < strlen(s);i++)
*(p+i) = *(p1+i);
puts(s);
//strcmp
char s2[] = "hjkla";
p = s2;
p1 = s1;
while(*p && *p1 && *p1 == *p)
{
p++;
p1++;
}
printf("%d\n",*p1 - *p);
//strcat
p = s2;
p1 = s1;
p = p+len-1;
while(*p1)
{
*p = *p1;
p++;
p1++;
}
puts(s2);
return 0;
}
6、使用指针实现字符串逆置
#include<stdio.h>
int main(int argc, const char *argv[])
{
char s1[6] = "hello", s2[6];
// int len1 = 0, len2 = 0;
char *p = s1, *q = s2;
while(*q)
{
q++;
}
while(*p)
{
*q = *p;
p++;
q--;
}
puts(s2);
return 0;
}
7、二维数组最大值
#include<stdio.h>
int main(int argc, const char *argv[])
{
int i,j;
int a[2][2];
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j ++)
scanf("%d",&a[i][j]);
int (*p)[2] = a;
int max = a[0][0];
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j ++)
{
if(p[i][j] > max)
max = p[i][j];
}
printf("%d\n",max);
return 0;
}
8、二维数组输入输出
#include<stdio.h>
int main(int argc, const char *argv[])
{
int i,j;
int a[2][2];
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j ++)
scanf("%d",&a[i][j]);
int (*p)[2] = a;
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j ++)
printf("%d",*(*(p+i)+j));
return 0;
}
9、指针数组main的外部传参
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
int num1, num2,ret;
char o;
num1 = atoi(argv[1]);
num2 = atoi(argv[3]);
//把操作符不作任何改变直接进行字符串之间的比较
if(!strcmp(argv[2],"+"))
ret = num1 + num2;
else if(!strcmp(argv[2],"-"))
ret = num1 - num2;
//取到操作符后转成字符
o = *argv[2];
switch(o)
{
case'/':
ret = num1 / num2;
break;
case'*':
ret = num1 * num2;
break;
case'%':
ret = num1 % num2;
}
printf("%d\n",ret);
return 0;
}
思维导图