指针
前言
记录一个数据对象在内存中的存储位置,需要两个信息:
1、数据对象的首地址。
2、数据对象占用存储空间大小
基础数据类型所占内存空间大小(字节),一个字节代表8个二进制位
char 1
short 2
int 4
long 4
longlong 8
float 4
double 8
指针数据类型
取地址运算符&
可以获取数据对象的首地址和所需存储空间大小
声明指针类型
int n; int* pn=&n;
指针类型的值是目标数据对象的首地址!
C语言中通过不同的指针类型服务器托管网来标记目标数据对象的空间大小,那么不同数据类型能否相互赋值呢?
比如:
#include int main() { int n; int *pn=&n; char y; char *py=&y; pn=py; printf("pn=%un",pn); printf("py=%un",py); return 0; }
由于char和int 类服务器托管网型所占空间大小不一样,不能进行自动转换。
取值运算符*
根据指针存储的首地址和空间大小找到目标数据对象。
注意:%p是指针类型专用站位符,在32以及64位编译条件下都能保证打印正确。
也可以这样使用指针修改所指数据对象,以及访问数据对象。
指针类型大小
注意:char和int存储的是数据范围不同的两种数据,char型占用空间小一点,int占用空间大一点。 char*和int*存储均为数据对象的地址,它们所占的空间是相同的。
强制转化指针类型
int型指针和char型指针不能使用赋值自动转化,如果使用强制转化。
我们可以看到下面程序,强制将pn转化为char *赋值给pc,再看运行结果,两个首地址、值一致。
指针运算
指针类型地址加减规律
指针类型加n后,首地址向后移动n*步长字节。
指针类型减n后,首地址向前移动n*步长字节。
注意:取值运算符*的优先级高于算术运算符。
数组
访问数组方法
1、数组名【下标】
2、 *(数组名+偏移量) 其中偏移量表示相差元素个数
指针作为参数传递
仅有首地址的指针类型void *
类型为void *的指针仅保存首地址,不保存目标数据对象的空间大小。
void *好处:任意类型的指针都可以直接赋值给它。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
select A.sname,sum(B.score) as 总分 from stu as A inner join sc as B on A.sid=B.sid where cid!=2 group by sname having sname!=’bbb’ …