字符指针的操作
#include
// 字符指针
int main() {
char str[] = "hello world";
// str++; 不可以
printf("str = %sn", str);
printf("str = %pn", str);
char *p = str;
*p = 'm';
p++;
*p = 'i';
printf("str = %sn", str);
printf("p = %sn", p);
p = "faye";
printf("str = %sn", str);
printf("p = %sn", p);
// 字符指针 指向字符串区域
char *q = "haha";
q++;
printf("q = %sn", q);
int *arr = {111, 222, 33};
printf("arr = %dn", arr);
return 0;
}
字符串拼接案例
#include
// 字符串拼接函数
void mystrcat(char *dest, const char *src){
// src[0] = 'a'; const char *src 有 const 修饰 就变成了只读, 目的就是安全
int len1 = 0;
int len2 = 0;
while (dest[len1]){
len1++;
}
printf("len1 = %dn", len1);
while (src[len2]){
len2++;
}
printf("len2= %dn", len2);
dest[len1] = src[0];
dest[len1+1] = src[1];
dest[len1+2] = src[2];
for (int i = 0; i < len2; i++) {
dest[len1+i] = src[i];
}
}
int main() {
char dst[100] = "hello faye";
char src[] = "123456666";
// 编写函数将 src字符串 追加到 dst后面
mystrcat(dst, src);
printf("%sn",dst);
return 0;
}
const 修饰指针变量
#include
int main() {
//const修饰一个变量为只读
const int a = 10;
// a = 100; error
// 指针变量 指针指向的内存 是 2个不同的概念
char buf[] = "asdfghjkl";
// 从左往右看,跳过类型,看修饰哪个字符
// 如果是*, 说明指针指向的内存不能改变, 但是指针的指向可以变
// const修饰的是指针,指针的指向可以改变, 指针指向的值(内存区域)不能更改
const char *p = buf;
// p[0] = 'a'; error
p = "ddddddddd";
printf("p = %sn",p);
printf("buf = %sn",buf);
// 如果是指针变量,说明指针的指向不能改变,指针的值能修改
//const修饰的是常量 , 指针的指向不可以改,指针指向的值(内存区域)可以更改
char * const p2 = buf;
// p2 = "ddddddd";
p2[1] = 'x';
printf("p2 = %sn",p2);
printf("buf = %sn",buf);
// p3 为只读 指向不能变,指向的内存也不能变
const char * const p3 = buf;
// p3 = "dad";error
// p3[0] = 'a';
return 0;
}
- 有个数组,找出第二大的数,并且打印出来(使用*操作数组元素个数,不要使用[])
int a[] = {5,100,32,45,21,67,32,68,41,99,13,71};
- 不使用库函数,实现字符串拷贝功能
char src[100] = “hello”;
char dst[100]; //把src的内容拷贝给dst
#include
int main() {
char src[100] = "hello";
char dst[100]; //把src的内容拷贝给dst
char *p1 =src;
char *p2 =dst;
p2 = p1;
printf("%s n", p2);
printf("%s n", dst);
return 0;
}