音乐网站模板下载,营销策划方案总结,海尔建设此网站的目的是什么意思,校园推广方式字符串实现
在C语言中#xff0c;表示一个字符串有以下两种形式#xff1a;
用字符数组存放一个字符串。用字符指针指向一个字符串。
案例 #include stdio.h/*** 方式1#xff1a;使用字符数组实现字符串*/
void str_test1(){// 定义一个伪字符串char str[] 表示一个字符串有以下两种形式
用字符数组存放一个字符串。用字符指针指向一个字符串。
案例 #include stdio.h/*** 方式1使用字符数组实现字符串*/
void str_test1(){// 定义一个伪字符串char str[] I Love You;printf(%s\n,str);}/*** 方式2使用字符指针实现字符串*/
void str_test2(){// 定义一个伪字符串char *str I Love You;printf(%s\n,str);}int main(int argc,char *argv[]){str_test1();str_test2();return 0;}注意字符数组和字符指针变量都能实现字符串的存储与运算。字符指针— 字符类型的指针变量
字符数组和字符指针的联系
字符数组由元素组成每个元素中存放一个字符而字符指针变量中存放的是地址也能作为函数参数。 只能对字符数组中的各个元素赋值而不能用赋值语句对整个字符数组赋值。
char arr[3];arr[2] A; // 正确对字符数组中的元素赋值
arr {A,B,C}; // 错误可以理解为数组名就是一个常量也就是一旦创建就不能再改变字符数组名虽然代表地址但数组名的值不能改变因为数组名是常量。 对于字符串中字符的存取可以用下标法也可以用指针。 #include stdio.hint main(int argc,char *argv[]){// 使用两种方式定义字符串char str1[] 你好张欣;char *str2 你好张欣;// 我们将数据类型为char的指针变量称之为字符指针// 测试赋值// str1 你好张鹏; // 不能对字符数组整体赋值如果要赋值请使用string库下strcpy();str2 你好张鹏;// 打印输出printf(%s,%s\n,str1,str2);char a[] I Love You!;char *b I Love You!;// 使用下标法和指针法来访问字符串printf(%c,%c,%c,%c\n,a[2],*(a2),b[2],*(b2));return 0;}字符串作为形式参数
实参与形参都可以是字符数组 void fun(char str[],int len){..}void main(){char str[] hello;fun(str,sizeof(str) / sizeof(str[0]));};实参用字符数组形参用字符指针 void fun(char *str,int len){str[2] A; // GCC编译环境可通过
}void main(){char str[] hello;// 常量池此时的赋值将常量池中的数据读取出来存入到栈中数组对应的位
置fun(str,sizeof(str) / sizeof(str[0]);}实参和形参都是指针变量在函数内部不能对字符串中的字符做修改
void fun(char *str,int len){str[2] A; // 错误字符串常量一旦创建就不能被改变
}void main(){char *str hello;fun(str,sizeof(str) / sizeof(str[0]);}实参是指针类型形参是字符数组在函数内部不能对字符串中的字符做修改
void fun(char str[],int len){str[2] A; // 错误字符串常量一旦创建就不能被改变
}void main(){char *str hello;fun(str,sizeof(str) / sizeof(str[0]);}注意
字符数组在创建的时候会在内存中开辟内存空间内存空间可以存放字符数据字符指针在 创建的时候需要依赖于字符数组字符指针在内存开辟的内存空间中存放的是数组元素的 地址。字符指针的创建依赖于字符数组字符数组可以独立存在而字符指针不能独立存在。字符数组可以初始化但是不能赋值字符指针可以初始化也可以赋值。
案例 #include stdio.h/*** 定义一个函数实现字符串的拷贝返回字符串长度* param source 拷贝的源字符串* param target 需要保存拷贝数据的目标字符串* return 字符串的大小*/
int str_copy(char *source,char *target){// 定义一个循环变量int i 0;while(source[i]!\0){// 实现拷贝*(targeti) *(sourcei);// 指针法// target[i] source[i];// 下标法i;}// 拷贝结束后一定要给target末尾加上\0target[i] \0;return i;}int main(int argc,char *argv[]){// 定义两个数组从键盘录入字符串char source[20],target[20];printf(请输入一个字符串\n);scanf(%s,source);int len str_copy(source,target);printf(%s,%s,%d\n,source,target,len);return 0;}案例
#include stdio.h/*** 定义一个函数实现字符串的截取* param source 源字符串* param start 开始截取的位置* param end 截取结束的位置* param target 截取后的字符串* return 新字符串长度*/
int str_split(char *source,int start,int end,char *target){// 定义循环变量int i 0, k 0;// 遍历源字符串数组while(source[i] ! \0){// 根据位置截取if(i start i end){// 将截取的字符串存入target helloworldtarget[k] source[i];k;}i;}// 新字符串需要末尾添加\0target[k] \0;return k;}int main(int argc,char *argv[]){char *str abcdefg;char target[100];int len str_split(str,2,5,target);printf(%s,%s,%d\n,str,target,len);return 0;}