指针基础(1)

1,指针的理解

指针,也是一个变量的数据类型,它的值是另外一个变量的地址。也就是说指针是存放内存地址变量的一种特殊数据类型。

1.1    声明一个指针变量:char  *p = &achar;

*  p:指针变量本身的名字;

*  “*”:表示p是一个指针变量;

*  &:取地址运算符,返回变量地址;

*  &achar:代表变量achar的地址编号;

*  =:把变量achar的地址编号,赋值给指针变量p。

此时,指针p里存储的,是字符变量achar的地址编号,即指针p指向achar。

1.2    指针运算符:

*  &取地址运算符;

*  使用%p打印一个地址编号,打印指针变量的值;

*  指针变量所占的内存大小为4个字节(64位下为8个字节)的整数。

列如:

#include <stdio.h>
int main()
{
  char a;
  char b;
  printf("%p,%p\n",&a,&b);
}
2, 指针变量

*  他的值就是个地址编号;

*  指针变量的值可以改变,存储一个新的地址,即指向另外变量。

*  他是有类型的

*  多个指针可以指向同一个变量。

3, 通过指针访问指针指向的变量

*解引用运算符,即间接引用运算符

*解引用运算符的作用

如例:

#include <stdio.h>
int main()
{
 int x;
int *p,*q;
p = &x;
q = &x;
x = 4;
printf("x = %d\n",*p);
printf("x = %d\n",*q);
printf("x = %d\n",x);
return 0;
}

/*
x = x + 3;//x=7;
int y = x;//y=7;
int z = *p;//int z = x = 7;
*p = 8;//x = 8;
*q + *p//x + x;
*&x:从右往左看,&x是x的地址,即指向x的指针,*&x等价于x。
*&x = *q + *p等价于x=x+x;
*/

4,声明一个指针变量;列如:

char *p;  int  * q;  float * r;  long double *s; long int *t;

5,   未初始化的指针称作悬浮指针。

6,初始化指针 

 *  空指针:当定义一个指针,你还不确定要指向哪个变量时,就把他初始化量为空。

int  *p;

p = NULL;或 p = 0;//c语言中,空指针的值可以用 NULL 和 0 来表示;

*  在用到的地方对空指针进行初始化:int a = 8;int *p = &a; 

7, 用指针做函数参数

7.1  传指针:

#include <stdio.h>
void exchange(int *a,int *b);
int main()
{
int a,b;
scanf("%d,%d",&a,&b),
exchange(&a,&b);//把变量a和变量b的地址,传递给exchange函数中的形参指数变量。
printf("%d,%d",a,b);
return 0;
}
void exchange(int *a,int *b)
{


   int temp = 0;
   temp=*a;//等价于temp=a;temp存储原来的a的值
   *a=*b;//等价于a = b;
   *b=temp;//b等于原来的a;
}
8, 函数返回一个指针变量 

列如:输出两个数中最大值

#include <stdio.h>
int* smaller(int *a,int *b)
{
   return *a>*b?a:b;//等价于return(a<b?&a:&b);
}
int main()
{
  int a,b,*p;
  scanf("%d,%d",&a,&b);
  p=smaller(&a,&b);
  printf("%d\n",*p);
}

9, 内存分配

9.1 内存分配类型:

在C,C++中内存分为5个区,分别为栈区,堆区,全局|静态存储区,常量存储区,代码区。

静态内存分配:编译时分配。包括:全局,静态全局,静态局部三种变量。

动态内存分配:运行时分配。 包括:

*  栈 :局部变量。push ,入栈;Pop,出栈。

float* func(int n) / /形参n被分配在栈上

{

float array[n];

return array;/*severe mistake*/

}

*  堆:C语言中用到的变量被动态的分配在内存中。(malloc或calloc,realloc,free函数)









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值