字符串赋值给字符指针(char *a="hello")的正确理解方式
2014-08-06 10:48
239 查看
对于语句 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"仅仅代表其第一个字符的地址*/
本文地址:http://blog.csdn.net/daheiantian/archive/2010/12/28/6110957.aspx
对于这个声明方式,会造成的误解是:声明了一个字符指针(它会指向一个位置),将“字符串”赋值给 指针表达式"*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"仅仅代表其第一个字符的地址*/
本文地址:http://blog.csdn.net/daheiantian/archive/2010/12/28/6110957.aspx
相关文章推荐
- 字符串赋值给字符指针(char *a="hello")的正确理解方式
- 字符串赋值给字符指针(char *a="hello")的正确理解方式
- 字符串赋值给字符指针(char *a="hello")的正确理解方式
- 字符串赋值给字符指针(char *a="hello")的正确理解方式
- 指针与字符串:(const)char *p2 = "lmj";定义的是一个字符串常量!符串常量,正因为是常量,所以它内部的字符是不允许修改的。
- char * 与 char [] 区别,char *[] 与 char[][]区别。字符串指针的数组与二维char数组区别。字符串常量赋予指针与字符数组区别。"字符串"等价于其首元素"字"的地址
- 实验 9 指针1 输入一行字符,要求用自定义的函数void f(char *line)统计和输出字符串中数字字符、英文字符和其他字符的个数
- 字符指针初始化方式与字符串存储位置之间的关系
- 输入一个字符串,存储在字符数组里,用指针的方式逐一显示字符,并求其长度
- 对C语言中的字符串,字符数组以及用指针表示字符串的理解
- 指向字符数组的指针 char*p="abc"和char p[]="abc"的区别。
- 字符串的存储方式,以及sizeof()(字符数组,字符指针,Sizeof总结)
- 从一个字符串中返回第一个没有重复出现的字符(例如"Hello World",返回"H")
- 如何理解不能用字符串给字符数组赋值
- 面试题--字符串指针与字符串数组的区别char* st="abc;与char* str[]="abc";的异同
- C语言:将输入的字符串(char* cp)存入字符指针数组(char * spa[])
- C语言中字符指针赋值""和NULL的区别
- 通过strstr函数来深入理解逐个给字符数组赋值和用字符串给字符数组赋值的区别
- 数组与字符串、字符指针与其他类型指针、赋值参数、指针参数以及引用参数、函数指针
- Delphi的字符(Char),字符串(String),字符串指针(PChar),字符数组arrayofchar