day8指针数组,数组指针

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;
}

思维导图在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值