比较通俗易懂的c指针笔记 (一)
来源:互联网 发布:行知实验学校怎么样 编辑:程序博客网 时间:2024/04/28 05:13
比较通俗易懂的c指针笔记 (一)
理解指针:
指针是一个其数值为地址的变量。注意它也是一个变量。
变量和指针的联系和区别:
什么是变量?编写程序时变量一般有两种属性:变量名、数值。当程序被编译和加载后,同一个变量在计算机中的两个属性:地址和数值。变量的地址可以看作计算机中变量的名称。通俗的讲声明一个变量就是在内存中分配一块存储空间,并且用变量名表示该存储空间的“名字”。而指针指向的是一块存储空间。稍后详细介绍。
间接运算符:
*是间接运算符的写法。看例子:
int a=3;
int *ptr;
ptr=&a;
*ptr=3;
可以看出*运算符是获取该地址下存放的数值。该地址即指针指向的变量的地址下的数值,这里是变量a的地址下的数值也就是3。
指针的声明:
int *pi;
char *pc;
等等。其中*pc和*pi代表的是内存地址中存放的数值。而星号表示pi和pc为一个指针变量。int,char这是声明了变量的类型,并且说明了其占用的存储空间的大小。pi为int型指针。pi+1是什么?后面介绍。
插曲,谈数组:
数组本身就是一系列具有空间连续性的内存地址。例如:
int a[6];代表一个具有6个元素的数组,也可以看出它有6块连续的内存空间。其中数组名a就表示该数组首元素的地址。例如:
char a[6];
scanf("%s",a);
这里的a没有用取地址赋修饰。a[0]则代表一个元素。
谈指针不得不谈地址:
在c中,对一个指针加1的结果是对该指针增加1个存储单元(storage unit),对于数组而言地址会增加到下一个元素的地址,而不是下一个字节。(这里所说的运算其操作对象是地址。)
例如:
#include<stdio.h>
#define SIZE 4
int main(void)
{
short dates[SIZE];
short *pti;
short index;
double bills[SIZE];
double *ptf;
pti=dates;
ptf=bills;
printf("%23s %10s\n","short","double");
for(index=0;index<SIZE;index++)
printf("poiters+%d:%10p %10p\n",
index,pti+index,ptf+index);
return 0;
}
部分运行结果:
short double
pointers+0: 0012ff78 0012ff50
pointers+1 0012ff7A0012ff58
可以看出pointers+1加了一个存储单元。shor类型的是两个字节为单位增加。double是8个字节为单位增加的。
指针的数值就是它指向的对象的地址,而对象的地址通常是首字节的地址。
理解指针:
指针是一个其数值为地址的变量。注意它也是一个变量。
变量和指针的联系和区别:
什么是变量?编写程序时变量一般有两种属性:变量名、数值。当程序被编译和加载后,同一个变量在计算机中的两个属性:地址和数值。变量的地址可以看作计算机中变量的名称。通俗的讲声明一个变量就是在内存中分配一块存储空间,并且用变量名表示该存储空间的“名字”。而指针指向的是一块存储空间。稍后详细介绍。
间接运算符:
*是间接运算符的写法。看例子:
int a=3;
int *ptr;
ptr=&a;
*ptr=3;
可以看出*运算符是获取该地址下存放的数值。该地址即指针指向的变量的地址下的数值,这里是变量a的地址下的数值也就是3。
指针的声明:
int *pi;
char *pc;
等等。其中*pc和*pi代表的是内存地址中存放的数值。而星号表示pi和pc为一个指针变量。int,char这是声明了变量的类型,并且说明了其占用的存储空间的大小。pi为int型指针。pi+1是什么?后面介绍。
插曲,谈数组:
数组本身就是一系列具有空间连续性的内存地址。例如:
int a[6];代表一个具有6个元素的数组,也可以看出它有6块连续的内存空间。其中数组名a就表示该数组首元素的地址。例如:
char a[6];
scanf("%s",a);
这里的a没有用取地址赋修饰。a[0]则代表一个元素。
谈指针不得不谈地址:
在c中,对一个指针加1的结果是对该指针增加1个存储单元(storage unit),对于数组而言地址会增加到下一个元素的地址,而不是下一个字节。(这里所说的运算其操作对象是地址。)
例如:
#include<stdio.h>
#define SIZE 4
int main(void)
{
short dates[SIZE];
short *pti;
short index;
double bills[SIZE];
double *ptf;
pti=dates;
ptf=bills;
printf("%23s %10s\n","short","double");
for(index=0;index<SIZE;index++)
printf("poiters+%d:%10p %10p\n",
index,pti+index,ptf+index);
return 0;
}
部分运行结果:
short double
pointers+0: 0012ff78 0012ff50
pointers+1 0012ff7A0012ff58
可以看出pointers+1加了一个存储单元。shor类型的是两个字节为单位增加。double是8个字节为单位增加的。
指针的数值就是它指向的对象的地址,而对象的地址通常是首字节的地址。
- 比较通俗易懂的c指针笔记 (一)
- 比较通俗易懂的c指针笔(二)
- C语言中->、变量、指针、结构体的解释,通俗易懂!
- 杂论C语言指针笔记(一)
- C和指针 学习笔记(一)
- 《C与指针》学习笔记(一)
- C语言指针学习笔记一
- [C++]指针和引用的比较小结
- C引用与指针的比较
- C语言的指针笔记
- C++:浅说指针比较
- C/C++中指针数组、数组指针、指针函数、函数指针的比较
- C/C++中关于地址、指针和引用变量的学习笔记(一)
- [学习笔记]C和C++中指针的基础知识点(一)
- 回调函数,写的比较通俗易懂了
- KMP算法(通俗易懂的字符串比较算法)
- 关于CAN,讲得比较通俗易懂的一篇文章
- c语言中指针的使用【一】
- FFmpeg完美入门【10】-- FFmpeg裁剪说明
- Java中各种排序算法
- 传智播客的东西
- 腾讯副总裁吴军答腾讯的“抄袭与创新”(互联网行业的商业智慧)
- oracle导入,导出详细文档
- 比较通俗易懂的c指针笔记 (一)
- python中类属性与实例属性总结
- c语言中unsigned int和int的区别
- mysql 中 UNION的使用规则
- Hibernate自学:初步了解
- inet_ntop, inet_pton
- 代码托管:新一轮的开源热
- android在当前activity退出整个程序
- 湖南科大水题反思