- 论坛徽章:
- 5
|
上午没事干,随便写了一点自己最近一段时间学c的一些心得,望高手不要见笑!哪里写的不对,还请高手们多多指教!
- 说到c语言的字符串以及指针字符串,还有字符数组等,开始学习有点懵。
- 不过一步一步学来也慢慢理解。
- 首先说字符:
- 定义一个字符变量:
- char c;
- 赋值:
- c='a';//也可以这样赋值:scanf("%c",&c);或者这样赋值: c=getchar();
- 然后输出:
- printf("%c",c);
- 当然也可以这样输出:
- printf("%d",c);//输出字符的十进制;
- 另一个函数的输出:
- putchar(c);//一次好像只能输出一个字符;
- //==================================================================================
- 下面说说通过指针变量给字符变量赋值
- 同样定义一个指向字符的指针:
- char *cp;
- char c;
- cp=&c; //将c的地址存入指针变量cp,因为cp是指针变量,所以cp只能存储变量的地址;
- 通过指针给变量c赋值:
- scanf("%c",cp);//因为cp是指向c的一个指针变量,它存储的是c的地址,所以cp前面不用添加取地址符号"&"
- //特别要注意的是:通过指针给c赋值之前,一定要将c的地址赋值给cp
- printf("%c\n",*cp);
- //====================================================================================
- 说完字符与字符指针,接着聊聊字符数组
- 例如:
- char a[3]={'a','b','c'};//下标也可以省略
- int i;
- //sizeof(a)获得数组的总字节数,sizeof(a[0])获得数组元素的字节数。
- //c语言了好像没有获得数组长度的函数(刚开始学,还找了好半天,哈哈)。不像javascript中length属性就可以获得数组大小
- for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
-
- {
- printf("%c\n",a[i]);
- }
- 接着看看指针与字符数组之间的关系:
- 定义一个指针:
- char *p;
- 让指针p指向数组:
- p=a;//c语言规定:数组名就是数组的首地址;当然也可以这样复制:p=&a[0];因为a[0]表示数组的第一个元素的值,那么&a[0]就表示数
- 组的首地址;
- 然后用指针来输出数组各元素的值:
- for(;p<a+3;p++)
- {
- printf("%c\n",*p);
- }
- //刚开始我不明白,为什么a不能a++,经过学习才知道,a在这里是常量,所以就不能改变!
- 假如我这样输出:
- printf("%s",p);
- 输出结果:abcw
- 为什么会输出abcw,而不是abc
- 为什么要这样: printf("%s",p); 而不是这样: printf("%s",*p);
- 我是这样理解的:
- printf("%s",*p)之所以错误:
- 原因有两点,第一,%s表示输出的是字符串,而c语言没有字符串这个基本类型, c语言就规定了字符串的表示是字符数组的末位元素
- 以'\0'结束的字符数组;那么字符串abc定义应该为: char a[4]={'a','b','c','\0'};
- 第二:printf("%s",*p)中的*p表示p所指向字符数组的第一个元素值'a',,而%s要求以'\0'结束,这样就出现了矛盾,导致错误!
- 假如我将字符数组的定义改为:char a[1]={'\0'};然后用printf("%s",*p)去测试一下(这个大家可以测试一下)哈哈!
- //=============================================================================================
- 写代码过程当中,字符串经常用到,特别是字符串数组。
- 如果你写过JavaScript或者ActionScript:字符串数组经常用也比较容易:
- 例如:
- js: str=new Array()
- str.push("abc")
- str.push("efg")
- 如果按照c语言语法要求:假如要定义一个字符串数组:
- char title[5][20]={"id","用户名","登录名","密码"};
- 这样的定义看起来比较麻烦,而且要浪费空间(第二维的下标必须是所定义的字符串中长度最大的一个);
- 这时,就要用到指针数组:
- char *p[4]={"id","用户名","登录名","密码"};
- 说实话,我刚开始对这样的定义很是纳闷,为什么?! 我总是认为:既然定义的是指针数组,那数组中的内容为什么不存放指针变量?
- 后来一想,明白了!(如果还不明白,就慢慢想,还是不明白,就回头看看前面的内容),我想就一切明白了!哈哈!
- 算了,不写了!以后有空,再写点心得。
-
复制代码 |
|