您的位置:首页 > 编程语言 > C语言/C++

指针与字符串知识整理 c语言

2018-03-14 20:03 393 查看
一、指针
1. 输出地址printf("%p",&i); //地址
printf("%x",&i); //十六进制整数32bit下两者相同,但是64bit就不同
2. int* p,q;     //int *p, int q;  没有int*这种类型,而是*p是int
    *p++;          //++优先级高于*,但p++为后缀,即取p++以前的值,p指针后移,所以是i=*p,p+1  
3. 数组
int a[10];  相当于 int *const a;  所以不可以有  int b[]; b=a;
a,&a,&a[0]都是相等的,表示数组a的起始地址
*a=a[0]表示a[0]的值
4.  i,&i,p,*pint i;
scanf("%d",&i); //i=%d
scanf("%d",i); //&i=%d;
void f(int *p) //若 f(&i)
{
printf("%d",*p); //i
printf("%p",p); //&i
printf("%p",&p); //&p即指针p的地址,即存放i的地址的变量的地址
}5.关于const 和指针
int *const p=&i;
指针p不可修改,不可再指向别的地址,不可有p++;
const int*p=&i;或int const *p=&i
即(*p)为const,不可通过p修改i
可以i++;可以p=&j;不能 *p=j;
二、字符串
1.一个字符串 :
char str[]={'h','i','\0'}
char str[]="hi"
char *str="hi"
计算字符串长度时不包括最后的0,但0要占空间,比如:#include <string.h>
strlen(str); //2
sizeof(a)/sizeof(a[0]); //32.字符串数组:
char str[][5]={"haha","hi",}     //hello的占用6个,会报错
ps:在c语言中,若有 char str[][10]={"hello""hi"}<==>{"hellohi"}
双指针和二维数组的区别
char **a;   //a是一个指向一个指针,该指针指向一个字符(串)
char a[][10]   //a[i]-->char [10]
char *a[]      //a[i]为一个指针,指向某处字符串
4.字符串输入输出
单字符输入输出
int putchar(int c)       //返回写出了几个字符,正常为1,有误EOF=-1
int getchar()             //返回E0F=-1表示输入结束  CTRL-Z(win)  CTRL-D(unix)
3.字符串操作
char *s="hello";
char *s2="hello";
s1和s2都只指向hello字符串,保存同一地址,而hello存放的位置为只读所以不可以有 s[0]='H'进行修改
如果要修改,则需要 char s[]="hello"即可修改
当传递参数 或需要动态分配数组空间时,使用指针
即字符串数组传入函数中时,函数无法对其修改
避免字符数组越界,如char s1[7];
char s2[7];
scanf("%6s",&s); //一个字符串最多6个字符不包括\0输入:1234567     //则s1:123456,     s2:7  此时不管空格和回车
不可以 char *str;  scanf("%s",str);    当str本身指向的地址为有害的时候,有可能会出错
4.字符串函数
<string.h>
size_t strlen(const char*s);          //不包括‘\0’
int strcmp(const char*str1, char *str2)     //0:str1==str2,    -1:str1<str2
      str1[]="abc";str2[]="Abc";
      strcmp(str1,str2);    //32: 'a'-'A'
int strncmp(const char*str1, char *str2,size_t n)    //前n个字符比较 

char *strcpy(char *restrict dst, char *restrict src)    //src-->dst
char *strcat(char *restrict s1, char *restrict s2)     //s1s2, s1需要有足够的空间
char *strchr(char *str, int c)                                   //返回NULL表示没找到
       char str[]="hello";
       char *c;
       c=strchr(str,'o');
       printf("%c",*c);    //'o'
char *strrchr(char *str, int c)    //从右边开始找

安全版本:
char *strncpy(char *restrict dst, char *restrict src,size_t n)

[b]char *strncat(char *restrict s1, char *restrict s2,size_t n) 
[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  指针 字符串操作