我在C++中有以下功能:
char** f()
{
char (*v)[10] = new char[5][10];
return v;
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio 2008表示如下:
error C2440: 'return' : cannot convert from 'char (*)[10]' to 'char **'
Run Code Online (Sandbox Code Playgroud)
为了使这个功能起作用,返回类型究竟应该是什么?
我现在要做的是创建一个长度由变量定义的数组.但是,当我将变量放入数组长度时,它给了我一个"可变长度数组的非POD元素类型'glm :: vec2'"错误.但是,如果我用实际数字替换变量,则错误消失.为什么会发生这种情况?我该如何解决这个问题?
int numtriangles = sector1.numtriangles;
glm::vec2 tex[test]; //Using a variable generates an error
glm::vec3 vertices[10]; //No error here
Run Code Online (Sandbox Code Playgroud) char a[][4] = {{'a','a','a'},
{'a','a','a'},
{'a','a','a'},
{'a','a','a'}};
Run Code Online (Sandbox Code Playgroud)
在c ++中,您必须初始化数组的最后一个索引.
在java中如果这样做会导致错误.
有人可以解释我为什么?
当我在java中检查这样的数组长度时.
System.out.println(a[0].length);
Run Code Online (Sandbox Code Playgroud)
结果是数组中列的长度
让我们说在数组的末尾有一个'\ 0',当我像这样用c ++检查数组的长度时.
cout << strlen(a[0])
Run Code Online (Sandbox Code Playgroud)
我得到整个数组的长度.
我可以像在java中一样在c ++中获取数组中行或列的长度吗?
这是java中的becuase数组是一个对象吗?
朋友我刚刚玩了一些指针程序,并意识到GCC(可能是C标准)区分静态和动态数组.
动态数组具有用于数组中元素地址的占位符,而对于静态数组,没有存储器位置,其中编译器存储元素数组的起始地址.
我有一个示例程序来证明我的困惑.
#include <iostream>
#int main(void)
{
int _static[10];
int *_dynamic;
_dynamic = new int [10];
std::cout<<"_static="<<_static<<" &_static="<<&_static<<" &_static[0]="<<&_static[0]<<std::endl;
std::cout<<"_dynamic="<<_dynamic<<" &_dynamic="<<&_dynamic<<" &_dynamic[0]="<<&_dynamic[0]<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于上面的程序,_static并&_static[0]在预期的行上返回相同的地址.但是,&_static也返回与其他两个相同的地址.
所以,_static并&_static参考相同的数字(或地址,无论我们想称之为什么).正如所料,_dynamic并&_dynamic指出不同的位置.
那么,为什么C标准会说_static并且&_static必须引用相同的位置.这听起来令人困惑.我觉得的一个原因是&_static没有多大意义.但那么它的使用不应该被报告为错误吗?
有人可以帮我解决这个困惑吗?
可能重复:
如何在C ++中使用数组?
2d数组是双指针吗?
二维数组和指针
我知道这是一个非常基本的问题,但是没有为我解决任何问题。这就是为什么要在这里发布它。在C ++中考虑声明int x[10];
这是一维数组,其中x是基本指针,它包含数组第一个元素的地址。因此,请x给我该地址并*x提供第一个要素。
同样的声明
int x[10][20];
Run Code Online (Sandbox Code Playgroud)
x这里是什么样的变量。当我做
int **z = x;
Run Code Online (Sandbox Code Playgroud)
编译器说它不能转换int (*)[20]为int **。为什么这样做cout<<x;并cout<<*x;给出相同的值?而且如果我将指针数组声明为
int *p[10];
Run Code Online (Sandbox Code Playgroud)
然后x和p(在其类型上)有区别吗?因为当一个声明int x[10]和int *p那么它是有效的分配x到p,但它不是那么二维数组的情况下?为什么?有人可以帮我清除这个问题,或者在此方面提供很好的参考资料。
套接字映射def:
map<unsigned char[6],RawSocket> sockets_;
Run Code Online (Sandbox Code Playgroud)
将值设置为套接字映射:
RawSocket tmp(ifcName,newSocketsIt->src_mac_);
sockets_[newSocketsIt->src_mac_] = tmp;
Run Code Online (Sandbox Code Playgroud)
RawSocket def:
class RawSocket{
public:
RawSocket(string ifcName,const unsigned char dstMac[6]);
}
Run Code Online (Sandbox Code Playgroud)
我不想拥有RawSocket的默认构造函数. 错误是:
/usr/include/c++/4.6/bits/stl_map.h: In member function ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = unsigned char [6], _Tp = RawSocket, _Compare = std::less<unsigned char [6]>, _Alloc = std::allocator<std::pair<const unsigned char [6], RawSocket> >, std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = RawSocket, std::map<_Key, _Tp, _Compare, _Alloc>::key_type = unsigned char [6]]’:
../sockets_container.cpp:18:34: instantiated from here
/usr/include/c++/4.6/bits/stl_map.h:453:11: error: no matching …Run Code Online (Sandbox Code Playgroud) 下面的代码打印整个字符串.我很困惑为什么会这样做.
char test[] = "jeff";
cout<<test<<endl;
Run Code Online (Sandbox Code Playgroud)
输出是"Jeff",我期望它打印char数组"test"的值,因为test是指针,指针是'J'的第一个元素.
为什么我打印整个字符串,当我cout<<test?
#include <iostream>
using namespace std;
const int MAX = 3;
int main ()
{
int var[MAX] = {10, 100, 200};
int *ptr;
// let us have array address in pointer.
ptr = var;
for (int i = 0; i < MAX; i++)
{
cout << "Address of var[" << i << "] = ";
cout << ptr << endl;
cout << "Value of var[" << i << "] = ";
cout << *ptr << endl;
// point to the next …Run Code Online (Sandbox Code Playgroud) 可能重复:
C中的char s []和char*s有什么区别?
char a [] ="string"之间的区别; char*p ="string";
首先,我想问一下我在哪里可以学习char*和char []的所有基础知识.
大多数时候,我发现自己在如何比较和如何申报方面苦苦挣扎.
例1:
char *test = "hello world";
Run Code Online (Sandbox Code Playgroud)
这将在编译时产生以下警告:
warning: deprecated conversion from string constant to ‘char*’
Run Code Online (Sandbox Code Playgroud)
例2:
vector<char*> test2;
test2.push_back("hello world");
Run Code Online (Sandbox Code Playgroud)
这将产生复制字符串的错误.
所以我想出的解决方案是:
(它是否正确?)
vector<char*> test3;
char *str1 = "hello world"
test3.push_back(str1);
Run Code Online (Sandbox Code Playgroud)
提前致谢!:)
============================================
这里的人提供了两个好的读物:
可能重复:
数组名是C中的指针吗?
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char *b=(char*)malloc(sizeof(char)*50);
b=(char*)"hello world";
// works
char a[50];
a=(char*)"hello world";
//doesn't work. why? I thought array names are just pointers that point
//to the first element of the array (which is char). so isn't a char*?
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为它不起作用的原因是因为没有名为"a"的变量实际上存储了char*值.那么'a'应该被视为右值吗?我不确定我是否正确理解了这个概念