如何创建指针变量来完成数组(不是第一个元素示例:int *ptr = &arr,而不是 int *ptr = arr)

阿里亚夫·博拉

我想使用&arr指向完整arr而不仅仅是第一个元素的事实来计算这样的数组长度

int size = *(&arr + 1) - arr ;

现在这将在 main 函数中工作,但我想计算未定义数组并arr作为参数的函数中的大小。

Asarr在传递给函数时衰减为指针。sizeof(arr)/sizeof(arr[0])方法不起作用

sizeof(int*) / sizeof(int) 
// i.e. 4/4 = 1.

我想&arr在函数内部使用方法,但由于某种原因这也不起作用......这就是为什么我想&arr在函数内部作为参数传递。我尝试通过将其&arr作为参数写入来简单地传递它,但我很困惑&arr它所说的数据类型是什么。

expected 'int *' but argument is of type 'int (*)[4]'

这很好,因为我int(*)[4]只传递但是如何指定这个内部函数参数?

贾罗德42

在 C++ 中传递对数组的引用的语法是:

template <typename T, std::size_t N>
std::size_t size(const T (&a)[N])
{
    return N;
}

对于 C,您没有模板来推断大小,因此类型/大小将被硬编码:

void foo(const int (*arr)[42])
{
    // ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么int * ptr_arr_int = {1,2}; 在C / C ++中不起作用?

如果 arr[3] 是一个数组,而 ptr 是一个指针,那么为什么 arr 和 &arr 给出相同的结果,而 ptr 和 &ptr 却没有

int x; 诠释 int * ptr; 不是初始化吧?

int(* ptr)();的语义?

unique_ptr <int>悬空指针

C中“ int arr [] = {}”和“ int arr []”的区别

创建一个shared_ptr到int的向量

为什么int * arr = {}; 法律?

在BST中使用unique_ptr而不是shared_ptr

使用 (*ptr)[5] 而不是 *ptr 的目的是什么?

int * ptr = 5如何计算;与int * ptr =变量的地址不同吗?

为什么 int arr[]={0,3,2,4,5,6,7}; 给出错误和 int arr[7]={0,3,2,4,5,6,7}; 不是

如果ptr是静态数组的第一个元素的ptr,编译器将如何评估++ * ptr ++?

func foo(arr [] int)int和func foo(arr [num] int)int有什么区别?

什么是unique_ptr :: get()而不是&*?

使用指针算法查找数组大小时,动态创建的数组(int * arr)与静态创建的数组(int arr [])之间的差异

2D数组:当我将ptr声明为int ptr [4] [4]时,为什么ptr和* ptr相同?

char *ptr = "hi" 和有什么不一样?int *ptr = "100"?

如何将int unique_ptr转换为void unique_ptr?

int(* ptr)[4]的真正含义是什么,它与* ptr有何不同?

对于我的代码,ptr =&n和ptr =(int *)malloc(4)有什么区别?

在销毁原始unique_ptr之后,由unique_ptr <T> :: get()返回的指针不是nullptr。

指针表达式:* ptr ++,* ++ ptr和++ * ptr

int(* arr)[20]和int arr [] [7]之间的区别是什么

foo(int arr [])和foo(int arr [10])有什么区别?

arr++ 在函数“int f(int arr[])”中是什么意思?

从int隐式转换为shared_ptr

std :: vector <std :: unique_ptr <int>>不编译

在shared_ptr中对const int的未定义引用