一、int * p和(int * )p的区别
- (int **)p;//强制将变量p转换成指向int类型指针变量的指针(转换后p是指向指针的指针)
- (int *) *p;//强制将变量 *p 转换成指向int类型的指针变量,(*p当成整体做强制转换,这么看来,p也可能是一个指向指针的指针)
- *(int *)p;//强制将变量p转换成指向int类型变量的指针,再取这个指针变量指向的值;相当于 * ((int *)p);
二、返回多个值给主函数的做法
返回指针:
-
int* display() { int *p; p=malloc(sizeof(int)*6); … return p; }
//用p[0]~p[5]计算各位
void main() { int *p; p=display(); … free( p ); } -
使用全局变量:将shiwa,wa,qiao,bai,shi,ge定义成全局变量,然后子程序和主程序直接用
-
使用函数参数:
void display(int* shiwa,int* wa,int* qiao,int* bai,int* shi,int *ge)
函数中用类似这样的用法计算:(*ge)=Data%10;
void main() {
int shiwa,wa,qiao,bai,shi,ge;
display(&shiwa,&wa,&qiao,&bai,&shi,&ge);
} -
用一个足够长的数返回:
long display()
{
long n; … n=shiwa; n*=10; n+=wa; n*=10; n+=qiao; n*=10; n+=bai; n*=10; n+=shi; n*=10; n+=ge;
return n;
}
void main()
{
int wa; long n;
n=display();
wa=n/10000;
wa%=10;
}
三、int*p=new int[n]的用法
这里直接来例子吧。
例如:int * m=new int[10];
这里,m是个指针,它指向一个数组长度为10的首地址。
这个数组存放的元素是int类型。所以要
int * m,指向首地址。
然后,对比下
int ** m=new int * [10];
这个m也是个指针,它也是指向一个数组长度为10的首地址。
只不过这个数组存放的元素类型是int * 类型。所以要用
int ** m指向首地址。
** int * a = (int * )malloc(n * sizeof(int))的含义**
四、int * p = (int * )malloc(n*sizeof(int))的含义
int * a=(int * )malloc(n* sizeof(int)); 表示定义一个int类型的指针变量a,并申请n* sizeof(int)个字节(即4*n个字节)的存储空间。
malloc函数得定义stdlib头文件。
malloc是在C语言中是一个申请内存单元的函数。
函数原型:void *malloc(unsigned size);
功 能:分配size个字节的内存空间
返 回 值:成功,返回分配的内存单元的起始地址;否则返回0
举例说明如下:
// 下面的定义方法是正确的
int * a=(int * )malloc(n*sizeof(int)); // 定义指针,并分配内存单元
*a = 4; // 将值存入到指针a所指向的内存单元中
// 下面的定义方法就会出错
int *a; // 定义指针,没有分配内存单元
*a = 4; // 此时系统不知道该将4存入到哪个内存单元(因为指针未指向具体的内存单元(此时称该指针为野指针)),所以执行的时候会出错(编译没错)。
注意:(1)定义一个指针,为该指针分配一个一块n个int空间的内存,当然malloc还可能会返回null就是了。
(2)动态分配内存给指针a,类似于分配a[n]大小的数据空间(n是常量时),只是这种方式下,n可以作为一个变量运行时确定,较为灵活,但是也要相应执行free操作,否则会出现内存泄漏。
(3)sizeof(int)就是int类型占用的内存大小