定义字符串&字符串数组
来源:互联网 发布:银联数据怎么样 编辑:程序博客网 时间:2024/04/29 02:53
1.用指针对二维数组的取值(要写到二维数组区域中)
假设一个一维数组a[]
很显然一维数组取值是 *(a+i) i代表指针的偏移量 a表示的是该数组的首地址
二维数组其实也就如同一维数组 只不过这个一维数组的元素是一个一维数组
所以对于二维数组arr[][] *(*(arr+i)+j) arr+i 是指向到arr中第i个元素
*(arr+i) 就是指向到2维数组中某一个元素 该元素本身又是一个数组
因此综合起来就是*(*(arr+i)+j)
虽然二维数组可以理解为一维数组 但是不能通过 *p=arr 这样的方式去指向
void testArr(){ int arr1[]={1,2,3}; int *p=arr1; //这句话拆开应该是 int *p; p=arr1 最终p才是指针变量 int arr2[3][3]={{1,2,3},{4,5,6}}; p=arr2[0]; int (*pp)[3]=arr2; //虽然二维数组可以理解为一维数组 但是不能像上面那样定义一个指针指向它 //要像这样 定义一个指针数组指向2维数组 pp++; //如果把2维数组看做一个矩阵 这相当于移动到下一行 //指针原本指向 {1,2,3} 这个元素, 现在指向了{4,5,6} printf("%d",*(*pp+1 )); //输出5}
2.指向字符串的指针变量
char *str="sdsdsds"; printf("%s", str );
或者
</pre><p style="line-height: 28px; margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; color: rgb(78, 78, 78); font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; text-indent: 2em;"></p><p style="line-height: 28px; margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; color: rgb(78, 78, 78); font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; text-indent: 2em;"><pre name="code" class="html"> char *str; str="sdsdsds"; printf("%s", str );// 注意赋给str的不是字符串 也不是字符 而是字符串的首地址
但是如果换成这样就不行:
char *str; *str="sdsdsds"; printf("%s", str );
3.字符串指针作为参数
常见做法:
#include "stdio.h "void copy_str(char from[], char dest[] ){ int i=0; for (;from[i]!='\0';i++ ) { dest[i]=from[i]; } dest[i]='\0';} void main(){ char from[]="sdsdsdfsf"; char dest[]="dfdsdgfg"; copy_str(from,dest); printf("%s",dest );}
使用指针作为参数
#include "stdio.h "
#include "stdio.h "void copy_str(char from[], char dest[] ){ int i=0; for (;from[i]!='\0';i++ ) { dest[i]=from[i]; } dest[i]='\0';} void main(){ char from[]="sdsdsdfsf"; char dest[]="dfdsdgfg"; copy_str(from,dest); printf("%s",dest );}
copy_str 中的for循环可以改写为
while ((*dest=*from)!='\0' ) { from++; dest++; }
或者进一步:
while ((*dest++=*from++)!='\0' );
4.指针的移动
void main(){ char *a="i love rilakkuma"; char *p=a+7; //移动指针 printf("%s",p ); printf("%c",a[5]);//虽然没有定义数组a 但由于字符串在内存中是以数组的形式存放的 //a[5]是按照*(a+5)来执行的}
输出 rilakkumae
5.指针数组
#include "stdio.h "void testArr();char str[][5]={"Bill","Sam","Jim","Paul","0"};//定义了一个数组 存放的数组类型是char指针型//该指针指向一个字符串数组 也就是char型的2维数组char *Names[]={ "Bill", "Sam", "Jim", "Paul", "0"};void main(){ //Names 本身是一个指针数组 Names是数组名 那么代表的是Names数组第一个元素地址 // *Names 就是根据地址区出地址中的内容 //printf("%s\n", *(&Names[0])); // 也就是说 *Names 和 *(&Names[0]) 一样 printf("%s,\n", *Names ); // 输出Bill, 实际上Names指向的是一个2维数组 char **p=Names; //由于Names本身是一个指针数组 想要指向指针数组 应定义一个2级指针 while(*p!=0 ){ printf("%s\n",*p ); p++; } *p=Names[0]; testArr();}void testArr(){ int arr1[]={1,2,3}; int *p=arr1; //这句话拆开应该是 int *p; p=arr1 最终p才是指针变量 int arr2[3][3]={{1,2,3},{4,5,6}}; p=arr2[0]; int (*pp)[3]=arr2; //虽然二维数组可以理解为一维数组 但是不能像上面那样定义一个指针指向它 //要像这样 定义一个指针数组指向2维数组 pp++; //如果把2维数组看做一个矩阵 这相当于移动到下一行 //指针原本指向 {1,2,3} 这个元素, 现在指向了{4,5,6} printf("%d",*(*pp)+1 ); //输出5 }
示例2
#include "stdio.h " void main(){ char arr[]={"123"};// 或者是{'1','2','3' }; char str[][6]={ "i'm"," 28"," year"," old"," my"," dear"," u" }; //注意要指定高维数组的大小 其长度为该数组最长元素的字符个数+1 char *p=arr; while(*p!='\0' ){ printf("%c",*p); p++; } printf("\n"); char *name[]={ "sss","ddd","ggg" }; //不能写成 *name[]=str char **pp=name; printf("%s\n",*pp);//输出sss printf("%c\n", *(*pp));//或者简写为printf("%c\n", **pp); //输出s int i=0; while ( i<3) { i++; printf("%s\n",*pp); pp++; } //**pp 两个*的含义 //如果只有一颗* 表示指向字符数据的指针 //两颗* 表示指向字符指针的指针}
给字符型数组赋值一个字符串
定义一个字符数组
char str[20]="123123";
char str2[20]={'1','2','3' };
但是注意不能像下面这样
char str[];
str="123123";
使用数组的时候,如果在定义数组的同时并没有对其初始化,必须要指定该数组的长度,否则系统不知道如何为其分配空间
要么char str[]="123123"; 要么char str[20]; 不能是 char str[];
如果是通过char str[20];这样的方式定义的数组
后面就不能再通过str={“xxxx”} 或是 str={‘x’, ‘x’, ‘x’, }这样的方式赋值了
目前发现可以这样
char str[3];
str[1]='2';
//。。。。
难道C语言中就不能先顶一个字符串然后在用的时候再赋值吗?
当然可以 用strcpy这个函数
strcpy(str,"address" );< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> strcat 的使用 char s3[]="sss"; char s4[]={"345"}; //printf("%s\n",strcat(s3,s4) ); // 和下面用指针输出的效果相同 char *s5=strcat(s3,s4); printf("%s\n" ,s5);
- 定义字符串&字符串数组
- 定义字符串数组的方法
- C++中定义字符串数组
- 数组与字符串的定义
- 指针定义字符串和数组定义字符串的区别
- 关于字符串数组,指针定义数组
- symbian 如何定义常量字符串数组
- 字符串数组的定义及初始化
- android资源文件中定义字符串数组
- Keil定义字符串数组到ROM中
- char a[100][100] 定义字符串数组
- 【c++】用string类定义字符串数组
- C语言定义字符串和字符数组
- C++用string 定义字符串数组
- 【C++】 用string类定义字符串数组
- Matlab定义字符串数组和连接字符串的方法
- 定义字符串
- C#中定义数组--字符串及数组操作
- 斐波那契数列改进算法
- Java使用MyEclipse构建webService简单案例
- 函数中的参数传递
- C# get set的个人理解
- 数据科学的完整学习路径—Python版
- 定义字符串&字符串数组
- leetcode刷题。总结,记录,备忘 100
- Java批量将文件中的段落替换成空格,根据指定分隔符换行(SQL示例)
- 垃圾回收
- 我从未停止奔跑
- 10106 - Product
- jeecg 服务器 + linux + nginx 安装
- 音视频处理入门基础
- Java中WebService实例