指针运算
- 如果是一个int *,+1的结果是增加一个int的大小
- 如果是一个char *,+1的结果是增加一个char大小
字符串克隆
c
#include <stdio.h>
// 字符串复制
void strcopy(char *dest, char *str)
{
int i = 0;
// while (str[i] != '\0')
// str[i] 存在
while (str[i])
{
dest[i] = str[i];
i++;
}
dest[i] = '\0';
}
// 指针操作复制
void strcopy1(char *dest, char *str)
{
int i = 0;
while (*(str + i))
{
// 取指针地址赋值
*(dest + i) = *(str + i);
i++;
}
*(dest + i) = 0;
}
// 指针操作复制
void strcopy2(char *dest, char *str)
{
while (*str)
{
*dest = *str;
*dest++; // 指针+1 相当于数组下标地址+元素地址大小
*str++;
}
*dest = 0;
}
// 指针操作复制
void strcopy3(char *dest, char *str)
{
while (*dest++ = *str++);
}
int main(void)
{
char str[20] = "hello world";
char str2[20];
// strcopy(str2, str);
// strcopy1(str2, str);
// strcopy2(str2, str);
strcopy3(str2, str);
printf("%s\n", str2);
return 0;
}
指针运算符
c
#include <stdio.h>
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int *p = arr;
// 指针操作数组时允许负数
printf("%d\n", *(++p)); // 2
printf("%d\n", *(++p)); // 3
printf("%d\n", p[-2]); // 3 左移2下标 1
printf("%d\n", p[2]); // 3 右移2下标 5
// 野指针
// p = p + arr; // err
// p = p * arr; // err
// p = p * 2; // err
// p = p / arr; // err
// 允许
p = p - arr;
p > arr;
p == arr;
return 0;
}