数组元素和指针
数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。
例如: int a[10]; /*定义a为包含10个整型数据的数组*/
int *p; /*定义p为指向整型变量的指针*/
p=&a[0]; 把a[0]元素的地址赋给指针变量p,也就是说,p指向a数组的第0号元素。
字符数组和字符串的区别
1. 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。
字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
2. 对字符串指针方式 char *ps="C Language"; 可以写为: char *ps; ps="C Language";
而对数组方式: char st[]={"C Language"};
不能写为: char st[20]; st={"C Language"}; 而只能对字符数组的各元素逐个赋值。
在字符串指定位置插入字符串
#include<stdio.h>
#include<string.h>
int main()
{
int num,i,len_str,len_ptr;
char str[64] = {0},ptr[32] = {0};
printf("please input:\n");
scanf("%s%d%s",str,&num,ptr);
len_str = strlen(str); //求数组长度要在输入数组之后
len_ptr = strlen(ptr);
for(i = 0;i <len_str - num;i++)
{
str[len_str - 1 -i + len_ptr]=str[len_str - 1 -i];
}
strncpy(str + num,ptr,len_ptr);
printf("%s\n",str);
return 0;
}
应用指针字符串倒叙输出
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void string_reverse(const char *ptr,char *str)
{
int i,length = strlen(ptr);
ptr+=(length-1);
for(i = 0; i <length ;i++)
{
*str = *ptr;
str++;
ptr--;
}
}
int main()
{
char *ptr = "helloworld!";
char *str = (char *)malloc(sizeof(char) * 64);
string_reverse(ptr,str);
printf("%s\n",str);
return 0;
}
判断是否是子字符串
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *str=(char *)malloc(sizeof(char)*32);
char *ptr=(char *)malloc(sizeof(char)*32);
int len_str,len_ptr,i;
printf("input :\n");
scanf("%s%s",str,ptr);
len_str = strlen(str);
len_ptr = strlen(ptr);
if(len_str < len_ptr)
{
printf("input error!\n");
return -1;
}
for(i = 0;i < len_str - len_ptr + 1;i++)
{
if( strncmp(str + i,ptr,len_ptr) == 0)
{
printf("%s 是 %s 子字符串\n",str,ptr);
break;
}
if(i == len_str - len_ptr )
{
printf("否\n");
}
}
return 0;
}