字符串赋值给字符指针(char *a="hello")的正确理解方式
2014-02-16 21:15
302 查看
字符串赋值给字符指针(char *a="hello")的正确理解方式
分类: C2010-12-28 14:42 5719人阅读 评论(5) 收藏 举报systemc2010
Technorati 标签: 字符串,数组,地址,char *;
对于语句 char *a="hello";
对于这个声明方式,会造成的误解是:声明了一个字符指针(它会指向一个位置),将“字符串”赋值给 指针表达式"*a"所指向的地址。但正解是:声明了一个字符指针后,并用字符串常量的第一个字符的地址赋值给指针变量a。
即正确顺序是:1.分配内存给字符指针;2.分配内存给字符串;3.将字符串首地址赋值给字符指针;
这里有两点需要考虑清楚的地方:①*a只是指向一个字符。举例如下:
[c++] view plaincopyprint?
#include <stdio.h>
#include <stdlib.h>
int main(void){
char *a="bcd";
printf("输出字符:%c /n", *a); /*输出字符,使用"%c"*/<br> printf("输出字符:%c /n", *(a+1) ); /*输出字符,使用"%c"*/
printf("输出字符串:%s /n", a); /*输出字符串,使用"%s";而且a之前不能有星号"*" */
system("pause"); /*为了能看到输出结果*/
}
/*运行结果如下:
输出字符:b<br>输出字符:c
输出字符串:bcd*/
② 若字符串常量出现在在表达式中,代表的值为该字符串常量的第一个字符的地址。所以”hello”仅仅代表的是其地址。
原声明方式相当于以下声明方式:
[c++] view plaincopyprint?
char *a;
a="hello";/*这里字符串"hello"仅仅代表其第一个字符的地址*/
相关文章推荐
- 字符串赋值给字符指针(char *a="hello")的正确理解方式
- 字符串赋值给字符指针(char *a="hello")的正确理解方式
- 字符串赋值给字符指针(char *a="hello")的正确理解方式
- 字符串赋值给字符指针(char *a="hello")的正确理解方式
- 对两个字符a和b进行初始化:char a[]="ABCDEF";char b[]={'A','B','C','D','E','F'};则以下叙述正确的是:
- 字符指针 char *p="abc" 与 char p[]="abc"的区别
- 关于对 (char *)字符指针强制转换类型的一些理解
- 指向字符数组的指针 char*p="abc"和char p[]="abc"的区别。
- 指针与字符串:(const)char *p2 = "lmj";定义的是一个字符串常量!符串常量,正因为是常量,所以它内部的字符是不允许修改的。
- char * 与 char [] 区别,char *[] 与 char[][]区别。字符串指针的数组与二维char数组区别。字符串常量赋予指针与字符数组区别。"字符串"等价于其首元素"字"的地址
- 输入一个字符串,存储在字符数组里,用指针的方式逐一显示字符,并求其长度
- 关于MTK模拟器中字符显示正确,手机上显示乱码的解决方式!!(原创)
- 关于LinuxC/C++中字符指针char * str 与字符数组 char str []的一点小区别
- 理解SQLSERVER中的排序规则,解决无法正确显示中文字符的问题
- LDD中 major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices)正确理解。
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- "字符流"与"字节流"的简单理解
- [java]深入理解java中的char,unicode编码及其实现方式
- 函数指针的正确理解 from C++ Primer Plus P242
- char p[] = "hello world" 与 char *p = "Hello world" 的差异