学习C语言指针的问题

1:*与&的区别:&表示的是某个数的地址,*表示的是取某个指针里面的值,列:int a = 1;int *p = &a;表示的是定一个整型变量a = 1,然后把a的地址给了p,此时p的指针指向a的地址,则p表示的值也为1

2:若定义了一个int *p则会是什么情况:此时p的地址将会是一个随机的地址,若要定义一个空指针应为int *p = NULL;

3:指针当中malloc的作用:

malloc就是memory allocate动态分配内存,malloc的出现时为了弥补静态内存分配的缺点,静态分配内存有如下缺点:

1、比如说,传统的一维数组,如int a[5],使用传统的一维数组需要事先指定数组的长度,而且数组的长度必须是一个常量(宏定义的 常量)

2、传统数组(静态分配),不能手动释放,只能等待系统释放,静态分配的变量在该函数内运行的时候有效,当静态分配的变量所在函数运行完之后,该内存会自动释放。静态分配的内存,是在栈中分配的,其实在C语言中的函数调用也是通过栈来实现的,栈这种数据结构的一个特点就是(先进后出),所以,在调用函数的时候,都是先压入栈中,然后,再从最上面的函数开始执行,最后,执行到main函数结束。动态分配通过malloc分配,是在堆中分配的,堆不是一种数据结构,它是一种排序方式,堆排序。

3、传统数组的长度一旦定义之后,就不能更改,比如说,如果我有一个业务在这之前给分配的大小为100,但是,我现在由于业务数量的增长,原来的大小就无法满足。

4、静态分配不能跨函数调用,就是无法在另一个函数中,来管理一个函数中的内存。静态分配,只在当前函数有效,当,静态分配所在的函数运行完之后,该变量就不能被其他的函数所调用。


4:malloc的用法:使用malloc时必须有头文件《malloc.h》,列:int *p = (int *)malloc(sizeof(int)。int *p表示的是一个为整型变量的指针p,int*表示将maoolc的viod*强制转换为int*类型,sizeof(int)表示为这个指针分配多少空间数


5:指针变量输出加*和不加*的区别:不加*输出的是定义的变量类型的地址,加*表示输出的是地址里面的值


6:指针定义的常见错误:int a = 1,*p;*p = a;(错误),不能对未赋值的指针作(指向运算)


7:数组与指针的区别:数组: 一个数组就是一个地址,并且该地址是一个常量值,不能改变。因此,数组名不能作为左值。
指针: 一个指针就是一个地址的地址 , 并且该地址是可以改变的。也就可以作为左值。


8:指针与地址的区别:指针就是地址,但地址不是指针。指针有类型,地址没有类型


9:函数调用指针:1、如果在被调函数中想修改主调函数中变量的值,则需要将主调函数中的变量的地址(指针)传递到被调函数中
2、如果主调函数要传递一个超大的数据到被调函数中时,也可以将主调函数的变量的地址(指针)传递到被调函数中,这样有利于提高程序的性能
3、传递N级指针是为了修改N-1级指针的值,


10:变量的类型:1、数据类型的本质是固定内存空间大小的别名
2、变量的本质是一段连续内存空间起始地址的别名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值