Category 女是世界杯

1.计算int *数组长度:

int arrayVlenth(float *p)

{

int len = 0;

while (*p)

{

p++;

len++;

}

return len;

}

sizeof(指针),sizeof(数组名)的区别:

例子:

#include

void fun(int *E)

{

std::cout<<"函数指针形参:"<

}

int main()

{

int A[10];

int *B = new int[10];

//int *&C = A //会报错

int *&D = B;

std::cout<<"数组名:"<

std::cout<<"指针:"<

std::cout<<"指针引用:"<

fun(A);

}

结果:

数组名:40

指针:8

指针引用:8

函数指针形参:8

当sizeof的参数是数组名时,计算的是整个数组的存储大小;当sizeof的参数是指针时,计算的是指针的大小(8字节,64位系统)。而且,可以定义对指针的引用,但却不能用数组名来作为指针引用的右值,可见数组名和指针还是有区别的。同时,将数组名作为实参传入函数时,因为形参是指针,所以在函数体内的其实是通过数组名初始化的指针形参,故不能在函数中通过 sizeof(指针形参)/sizeof(数组元素类型) 来计算数组长度。所以一般将数组名作为形参传入函数时,也会同时传递一个数组长度的参数。以上参考自:https://blog.csdn.net/u012707739/article/details/75732159

函数通过参数传入一个数组的指针,如何获取该数组的长度?

如 int InsertSort(int* array)

其中array的长度如何获取?用过sizeof(array) / sizeof(int),始终是1

注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

sizeof是在编译阶段展开的一个宏

错误,函数参数在运行阶段以压栈方式传递了一个地址

int mylen(int buf[]){ return sizeof(buf) / sizeof(int);}

正确,因为buf的分配过程是在编译阶段定义。int main(void){ int buf[] = {0, 0, 0, 0}; int l =sizeof(buf) / sizeof(int); printf("%d\n", l); system("pause"); return 0;}

C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。

#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

templateint getArrayLen(T& array){ return sizeof(array)/sizeof(array[0]);}

原文:https://blog.csdn.net/arcticfoxhan/article/details/38752703

top
Copyright © 2088 足球世界杯预选赛_荷兰世界杯 - twllb.com All Rights Reserved.
友情链接