指针


指针就是地址。

指针就是地址

指针就是地址

时刻记住这句话,把指针当做地址来理解,理解的更快一些。

 一:静态区(全局区)定义变量的时候初始化需要和定义在同一行。

问题:下边的程序分析:

#include<stdio.h>
int a=1,b=2;
int *i,*j;
i=&a;
j=&b;
void change(int *i,int *j)
{	int t;
t=*i;
*i=*j;
*j=t;
}
int main()
{
change(i,j);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}

变量的缺省存储类型取决于它的声明位置。凡是在任何代码块之外声明的变量总是存储于静态内存中,也就是不属于堆栈的内存,这类变量称为静态变量。对于这类变量,你无法为它们指定其他存储类型。静态变量在程序运行之前创建,在程序的整个执行期间始终存在。它始终保持原先的值,除非给它赋一个不同的值或者程序结束。

显而易见int *p; 和*p两句代码都代表指针p为静态变量,编译器会给两个指针都分配静态内存,但是编译器不知道*p这句代码指向的数据是什么类型的,因此编译器在*p这句代码这里会提示missing storage-class or type specifiers,也就是缺失存储类型。

也就是说在静态区(全局区)定义变量的时候初始化需要和定义在同一行。 因为编译器可没这么聪明,另起一行了编译器就会根据你的代码判断你是要新建另外一个指针,但是这个指针却没有指向的对象数据类型。

修改后的代码:

#include<stdio.h>
int a=1,b=2;
int *i=&a,*j=&b;
 
void change(int *i,int *j)
{    int t;
t=*i;
*i=*j;
*j=t;
}
int main()
{
change(i,j);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}

总结:静态区(全局区)定义变量的时候初始化需要和定义在同一行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

paidream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值