指针和字符串\字符指针作为函数参数

指针和字符串

 一步一步的往下研究

#include<stdio.h>
void main() {
	char arr[] = "hello";
	char* p = arr;
	printf("%s\n", arr);
	printf("%s\n", p);
}

尝试写在一起,看一看有什么区别

存储在常量区的数据如果相同只会开辟一份

void main() {
	char arr[] = "hello";    //存储在栈区
	char* p = "hello";    //存储在数据常量区
	arr[2] = 'k';  //可以更改
	//p[2] = 'k';  不可以更改
	//*(p + 2) = 'k';也不可以更改
	printf("%s\n", arr);
	printf("%s\n", p);

    //既然存储在数据常量区了,可以看一下如果数据相同,地址会不会相同
	char* p1 = "hello";
	printf("p的地址为:%p\n", p);
	printf("p1的地址为:%p\n", p1);
	/*p的地址为:003E7B30
     p1的地址为:003E7B30*/
	//可以看出地址是完全相同的,也就是两个指针指向的是同一个地址
}

 指针数组和字符串数组

指针数组是可以修改的

字符串数组是不可以修改的

void main(){
	//指针数组  (可以修改)
	char arr1[] = "hello";
	char arr2[] = "chen";
	char arr3[] = "123";
	//char* arr[] = { arr1,arr2,arr3 };
	
	//字符串数组   (不可以修改)
	char* arr[] = { "hello","chen","123" };

    //遍历字符串数组
	for (int i = 0; i < 3; i++) {
		printf("%s\n", arr[i]);
	}
	//打印字符串数组的首个元素
	for (int i = 0; i < 3; i++) {
		printf("%c\n", arr[i][0]);
	}

}

遍历字符串数组

交换地址,就完成了数据的交换

字符串数组本来数据就不能改变,但是指针字符串数组的数据时可以改变的,但还是最好采用交换地址的方式,不是每一个字符串都是一样长的

void main() {
	//字符串数组   (不可以修改)
	char* arr[] = { "hello","chen","wwww" };
	//使用冒泡排序对字符串数组进行排序
	for (int i = 0; i < 3 - 1; i++) {
		for (int j = 0; j < 3 - 1 - i; j++) {
			//获取数组的首元素,比较ascii码
			if (arr[j][0] > arr[j + 1][0]) {  //大于就交换,是升序
				//定义一个临时变量
				char* temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}			
		}
	

	}
	//遍历一下数组看一看对不对
	for (int i = 0; i < 3; i++) {
		printf("%s\n", arr[i]);
	}
}

字符指针作为函数参数

例如

//数组的写法
int my_lens01(char* arr) {
	int len=0;
	while (arr[len] != '\0')
		len++;
	return len;
}
//在用指针写一个
int my_lens(char* arr) {
	char* temp = arr;
	while (*temp != '\0')
//条件直接写成(*temp)也是可以的
		temp++;
	return temp - arr;
}

void main() {
	char arr[] = "abcdef";
	printf("%d\n", my_lens(arr));//输出6
	char arr2[] = "abc\0def";
	printf("%d\n", my_lens(arr2));//输出3 ,遇到\0直接终止了
}

补充数组作为函数参数会退化为指针

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萌新上大分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值