1.指针
1.1 指针大小
一般指针变量大小都为4个字节,大小与系统的机器字长相关。
64位 8个字节 寻址范围 2的64次方
32位 4个字节 寻址范围 2的32次方
16位 2个字节 寻址范围 2的16次方
1.2 辨析:
1.2.1 指针:变量的地址。//&a是不是个指针?是指针(地址)!但不是指针变量!
int a=5;
int *p;
p=&a;
1.2.2 指针变量:存放地址的变量 。//int *a 怎么解释a ?a是一个指向 int类型的指针变量!
1.2.3 指针数组:指向数组的指针。//int *p[5] 怎么解释p?存放着五个int类型指针变量的数组p。
int a[5]={1,2,3,4,5};
int *p;
p=a;//a是数组a[5]的首地址,是指针常量。
1.2.4 数组指针:放着指针变量的数组//int (*p)[5] p是指向有5个int类型变量的数组。
int (*a)[5];
int *p;
p=a;
1.2.5 二维数组指针:
1.2.6 函数指针:存放函数入口地址的指针变量。//int (*p)(int aa);指针p是指向函数的指针变量
char *s="Hello World!"
int (*p)(int *ss);
int function(int *s)
{
printf("%s/n",s);
}
p=function;
p(s);
1.2.7 返回指针的函数:函数return回来的变量是一个指针变量。//int *function(int a)
int *find(int (*p)[3],int n)
{
int *pa;
pa=p+n;
return pa;
}
int main()
{
static int score[3][3]={{1,2,3},{2,3,4},{3,4,5}};
int i,n;
int *p;
scanf("%d",&n);
p=find(score,n);
for(i=0;i<3;++i)
printf("%d ",*(p+i));
printf("/n");
return 0;
}
1.2.8 字符型指针
1. 字符指针数组和指向字符指针数组的二维指针
char *str[4];
char **ptr;
s="abcd";
(str+1)=&s;
1.2.9 指针的指针(二维指针):存放指针变量地址的指针变量。//int *p;int **pa;pa是指向
指针变量p的指针变量!
1.3 操作符:
* 指针运算符(间接访问运算符)
& 取地址运算符
--------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
2.关键字和存储类型
2.1 变量名必须是以下划线和字母开头的。
2.2 变量作用域
全局变量global variable和局部变量local variable
2.3 变量的数据类型和存储类别
=>数据类型:
表示存储在变量中的数据格式.
=>存储类别:
表示系统为变量分配存储空间的方式.
=>内存空间:
------------------------------------------
程序储存区 ------> 储存程序代码
------------------------------------------
静态储存区 ------> 储存程序中处理的数据(数据段和BSS未初始化数据段)
------------------------------------------
动态存储区 ------> 储存程序中处理的数据(堆栈和堆)
------------------------------------------
=>分配方式:
----------------------------------------------------------------------
静态存储方式:
在程序运行之前为全局变量、静态变量在静态储存区中分配固定的
储存空间,当整个程序执行结束时释放存储空间.
----------------------------------------------------------------------
动态存储方式:
当函数调用或是执行复合语句时,在动态储存区中为自动变量动态
分配存储空间,当函数调用和复合语句执行结束时释放存储空间.
----------------------------------------------------------------------
2.4 关键字
=> static 静态: static类型的变量在整个程序开始之前被创建,且值只被初始化一次(未指定初始化值,
会自动设置成0)。即变量的使用被限定在一个文件域中。static类型的函数,只能被同个源文件的函
数调用,即函数的调用被限定在一个文件域中。
=>标识符链接属性:
标识符的连接属性决定如何处理在不同文件中出现的标识符。
none: 在不同作用域中声明的标识符都会被当作独立的实体处理。
internal: 在同一个源文件中声明的同名标识符都会被当作独立的实体处理。但是不同的源文件中声明
的标识符则属于不同的实体。
external: 在所有不同的源文件中声明的标识符所用同名的标识符都会被当作同一个实体处理,当我们
对一个局部变量加上static时,该局部变量就成了静态的全局变量,它的连接属性由原先的none或internal
变成了external。
C语言指针和关键字理解
最新推荐文章于 2024-07-02 17:00:49 发布