根据一段代码理清一些变量,常量,数组,指针的关系及理解
来源:互联网 发布:java中webservice实例 编辑:程序博客网 时间:2024/05/16 06:49
#include<stdio.h>
int main(void)
{
char a[]="hello";
char *bPtr;
char b[]="good bye!";
bPtr=b;
printf("%d\t%s\n\n",sizeof(a),a);
printf("%d\t%p\n",sizeof(&b),&b);
printf("%d\t%d\t%c\n",sizeof(*b),*b,*b);
printf("%d\t%s\n\n",sizeof(b),b);
printf("%d\t%p\n",sizeof(&bPtr),&bPtr);
printf("%d\t%d\t%c\n",sizeof(*bPtr),*bPtr,*bPtr);
printf("%d\t%p\n",sizeof(bPtr),bPtr);
return 0;
}
根据以上自己编写的代码理解以下几点:
1.字符和字符串是不同的,printf("%d\t%d\t%c\n",sizeof(*b),*b,*b); 这行如果写成printf("%d\t%d\t%s\n",sizeof(*b),*b,*b)是错误的。字符转义符是“%c”,字符串转义符是“%s”,两者有本质的区别。
2.单个字符在计算机内存中是用ascii编码存储的,每个字符对应一个整数。
3.字符串是一个数组,数组的标识符代表了这个数组或是代表了指向数组第一个存贮单元的指针。即&b=“g”的存储地址,单独用b的时候b是一个数组,前面加上*或&,这时候b当成一个指针在用。
4.*b是对b指针指向的内存空间进行解引用,返回值是数组b[]的第一个存储单元的内容,即*b是“g”,但g在内存中是按ascii编码存储,是一个小的整数。可以把这个存储内容打印出来,通过不同的转义符打印出来的是不同的内容,例如通过“%c”则打印“g”,通过“%d”则打印“103”。
printf("%c\n",103); 打印出来就是”g“。编译器把103默认为常量。
printf("%d\n",103);打印出来是”103“
printf("%d\n",g); 是不可以的,因为编译器会把g默认为变量,而这个变量未声明,无法识别。
printf("%d\n",‘g’);是可以的。 printf("%c\n",‘g’);是可以的
- 根据一段代码理清一些变量,常量,数组,指针的关系及理解
- 关于常量指针 和 指针常量及 typedef 中一些难以理解的知识
- 常量指针与指针常量的一些个人理解
- 理解C语言指针和数组的关系的代码
- 常量数组指针的一些用法
- 一段代码引起的思考(变量占用字节数及指针)
- 理清C语言中指针与数组的关系(一、二)
- 一段代码理解函数指针
- 数组变量和指针的关系
- 理解指针和数组的关系
- 字符串常量与指针和数组的关系
- c/c++ 函数、常量、指针和数组的关系梳理
- linux c 中关于指针常量和常量指针以及数组的关系与区别
- 指针常量与常量指针的理解
- 从一段代码来看指针和数组名的区别
- 理清Webgis开发一些关系
- 二维数组与一维数组指针变量的关系
- 字符串常量,指针,数组,[],*各关系梳理
- Eclipse 如何同时打开查看多个文件
- hdu 1284 钱币兑换问题
- 浅析MVC和说媒的过程
- 一个点的经度和纬度,以这个点为圆心,1000米为半径,最大的经度和纬度,最小的经度和纬度
- 解读AFNetworking中Demo的MVC
- 根据一段代码理清一些变量,常量,数组,指针的关系及理解
- HDU-1147-Pick-up sticks
- 谷歌官方建议笔记——内存
- 中文 iOS/Mac 开发博客列表
- 虚幻4创建自己的UMG类别
- Java面试题全集(上)
- 两种无线接入技术综合介绍
- Eclipse光标变成黑色方块解决方法
- 有序数组合并