我使用这个代码:
memcpy(arr[i], arr1[i], sizeof(arr1[i]));
定义:
double** arr; // arr1 is difined the same way.
arr = new double*[row];
for (int i = 0; i < row; ++i) {
arr[i] = new double[col];
memcpy(arr[i], arr1[i], sizeof(arr1[i]));
}
我用命令构建它:g-Wall-Wextra-Wpedantic-c arr.cpp
,结果是:
警告:在“void*memcpy(void*,const void*,size_t)”调用中“大小”的参数与目标的指针类型“双*”相同;预期的“双倍”或显式长度 [-Wsizeof-指针-内存]
memcpy(arr[i], arr1[i], sizeof(arr1[i]));
^
我不明白它是什么。你能告诉我如何使它正确工作吗?
试试大小(双倍) * 列
代替。sizeof()
不知道你传递给了新
参数的是什么参数。
一个小的可视化可以帮助您更好地理解警告。
假设行=2,列=2。上图显示了arr1[0]
的可视化。
在你的代码< code>memcpy(arr[i],arr1[i],sizeof(arr 1[I]); < code > sizeof(arr 1[I])得出double*的大小(由@πάντα ῥεῖ).表示如上图所示,< code>arr1[0]是一个指向double的指针,因此< code>sizeof(arr1[0])可以取值4或8,具体取决于您运行的是32位还是64位应用程序。
如果col=2,则arr1[0]
可以保存两个双精度值,即arr1[0][0]
和
,如图所示。由于要复制整行,您必须指定
arr1[0]
所持有的字节长度,可以通过@ToddChristensen或
sizeof(arr1[i][0])*col
sizeof来实现。
由于您收到的警告要求指定显式长度,因此您必须使用下面的memcpy
才能使复制操作正常工作。
memcpy(arr[i], arr1[i], sizeof(arr1[i][0])*col);
希望这有帮助!
< code>sizeof(arr1[i])得出< code>double*指针变量的大小,而不是您分配的数组的实际大小。
这个警告是完美的,非常感谢。
当我尝试编译此代码时: 它给了我这个错误: pruebaso. c:在函数'main'中: pruebaso.c:5:9:警告:内置函数“printf”的隐式声明不兼容 [默认启用] printf(" x的值是%f,x的地址是%ld\n ",x, ^ pruebaso. c: 5:9:警告:格式'%ld'需要类型为'long int'的参数,但参数3的类型为'浮点数*'[-Wformat=] 我在
问题内容: 我是Java菜鸟。我已经掌握了将C / C ++指针转换为Java引用的概念,并且进展相当顺利。 我打了一段有指针的代码(即* ptr)。我需要取消引用指针并更改其指向的指针的值(即 ptr =&newthing;) 在Java中这似乎要困难得多。是否有人对如何解决此问题有任何想法?快速谷歌搜索什么都没有。 这是C ++中的代码示例。我想在Java中获得类似的工作,但是ptr_to_p
C++ 函数 向函数传递参数的指针调用方法,把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。 按指针传递值,参数指针被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为指针类型,该函数用于交换参数所指向的两个整数变量的值。 // 函数定义 void swap(int *x, in
问题内容: 这是指向指针的指针 您何时真正使用此功能?您可以适当地提出一些可以更轻松地执行其他操作的方法,但这不是我要的。我真的想知道您将在生产中使用此功能吗? 问题答案: 将指针传递给某物的目的是是否 需要 修改指向的值。(我们也使用指针来避免在传递时复制大型数据结构,但这只是为了优化。) 像这个例子一样: 预期的输出(在Go Playground上尝试): 如果of的参数仅接收,则只能修改副本
学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。 正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:#include <iostr
所以我有一个堆栈,它允许典型的Push和Pop函数。我很难理解这一切实际上是如何在代码方面工作的。我在这里看到了这篇文章,最佳答案中的图片/图表,展示了列表是如何被“推”下来的,你指向最新的元素。我有一个 它挂接到结构“节点” 我如何结合一个推拉与"节点*下一步;"?最难理解的是我将如何真正做到这一点。我知道它最初指向空,然后如果我推一个2,4,6,它将是6,4,2,#。掌握如何实际使用链表中的指