C语言指针初认识

目录

1.指针介绍

1.什么是指针?

2.悬空指针

3.空指针

2.指针应用

1.指针的值传递

2.指针的地址传递

3. *与&的意义

3.指针数组与数组指针(简单解释)

1.指针数组

2.数组指针


1.指针介绍

1.什么是指针?

       计算机中所有数据都存储在内存当中,不同类型的数据占用的字节数不一样,为了正确的访问到这些存储在内存上的数据,必须为每个字节编上号码,确定标号是唯一的,这样我们就可以根据标号找到相对应的内存。我们将内存中字节的编号称为地址指针。

       地址是从0开始依次递增的。对于32位操作系统的环境,程序能使用的内存为4G。

       最小的地址为0x0000 0000,最大的地址为0xFFFF FFFF

                                   低地址                                   高地址

指针的表示:在变量前加*号来表示

实例:

int main() {
	int* p, s;        //p是整型指针变量,s是整型变量
	char* pa, * pb;   //pa和pb都是char型指针变量
	int a = 10;     
	int* ip;          //未初始化的指针,不良的定义习惯
	ip = &a;          //与int *p = &a;  等价
	return 0;
}

    * 号的含义

1.表示乘法

2.表示定义一个指针变量,使得普通的变量与指针变量区分开

3.表示获得指针的数据,是一种间接操作(解引用)

总结:指针是内存的地址,指针变量时保存了内存地址的变量。指针的大小在32位平台是4个字节,在64位平台是8个字节。

2.悬空指针

     悬空指针也称为野指针,是没有访问权限的地址。这个地址可能存在也可能不存在,总之你无法访问。

3.空指针

     空指针表示当前是一个无效指针(NULL),一定程度上可以当做不存在

2.指针应用

1.指针的值传递

应用于函数当中,不用在函数调用后返回具体的值即可实现函数目标。

void swap(int a, int b) {
	int c = a;
	a = b;
	b = c;
}

int main() {
	int x = 10, y = 20;
	swap(x, y);
	return 0;
}

2.指针的地址传递

void swap(int *pa, int *pb) {
	int c = *pa;
	*pa = *pb;
	*pb = c;
}

int main() {
	int x = 10, y = 20;
	swap(&x, &y);
	return 0;
}

在这种情况下,实际的数值并没有被传递,传递的是存放数值的指针,也就是数值存放的具体地址,在函数调用中,由这个传递的地址来读取数据具体的值。这种应用于较大较多的数据调用中较为合适。因为指针的大小只有4个字节,但传递的数据可以是大量的(如数组数据的第一个数据地址,后序的数据提取只需依次读取即可,并不需要实际传输一整个数组的数据)

3. *与&的意义

*在前面已经介绍过具体的意义了,&在这里表示对所表示指针地址的解读,即取地址

比较复杂的有: *&a     &*pa     

        *&a表示为   *(&a) &a表示去变量a的地址,等价于pa,*(&a)则表示去这个地址上的数据,即为a本身

        &*pa 表示为   &(*pa),*pa表示取得pa指向的数据(即为a),&(*pa)表示数据的地址,即为&a,即为pa

3.指针数组与数组指针(简单解释)

1.指针数组

    指针数组是指一组指针,即连续的指针组成为一组数组,叫做指针数组,本质上是一组数组,数组内储存的元素为指针(即为存放的地址)

eg. 

       int a = 0 , b = 0 , c = 0 ;

       int * arr[3] = { &a , &b , &c};

arr[3]中存放的是a,b,c的地址,并非a,b,c本身的值。

2.数组指针

   即是一个指针,指向一个数组

eg.

       int(*p)[3];

即表示指向由三个整型组成的数组的整体

在这里要注意,[]的优先级为1级,*(指针运算)的优先级为2    即 [ ] > *

这里仅是两者的简单介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值