相关疑难解决方法(0)

为什么char**不能成为C++中以下函数的返回类型?

我在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)

为了使这个功能起作用,返回类型究竟应该是什么?

c c++ function return-type char

3
推荐指数
3
解决办法
868
查看次数

无法使用变量设置变量长度

我现在要做的是创建一个长度由变量定义的数组.但是,当我将变量放入数组长度时,它给了我一个"可变长度数组的非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)

c++ arrays

3
推荐指数
1
解决办法
3771
查看次数

java和c ++中的多维数组有什么区别?

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数组是一个对象吗?

c++ java

3
推荐指数
1
解决办法
1672
查看次数

静态和动态数组之间的区别

朋友我刚刚玩了一些指针程序,并意识到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 c++ compiler-construction gcc icc

3
推荐指数
1
解决办法
3909
查看次数

指针和多维数组

可能重复:
如何在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)

然后xp(在其类型上)有区别吗?因为当一个声明int x[10]int *p那么它是有效的分配xp,但它不是那么二维数组的情况下?为什么?有人可以帮我清除这个问题,或者在此方面提供很好的参考资料。

c++

3
推荐指数
2
解决办法
4509
查看次数

stl:map插入值时出错

套接字映射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)

c++ std

3
推荐指数
1
解决办法
2263
查看次数

为什么std :: cout可以打印char []?

下面的代码打印整个字符串.我很困惑为什么会这样做.

char test[] = "jeff";
cout<<test<<endl;
Run Code Online (Sandbox Code Playgroud)

输出是"Jeff",我期望它打印char数组"test"的值,因为test是指针,指针是'J'的第一个元素.

为什么我打印整个字符串,当我cout<<test

c++ pointers char

3
推荐指数
2
解决办法
2263
查看次数

指针用于数组和单个数据点之间的区别?

#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++ arrays pointers

3
推荐指数
1
解决办法
138
查看次数

关于char*和char []基础知识的问题

可能重复:
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)

提前致谢!:)

============================================

这里的人提供了两个好的读物:

char s []和char*s有什么区别?

char a [] ="string"之间的区别; char*p ="string";

c++ char

2
推荐指数
1
解决办法
257
查看次数

是一个rvalue数组的名称?

可能重复:
数组名是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'应该被视为右值吗?我不确定我是否正确理解了这个概念

c c++

2
推荐指数
2
解决办法
740
查看次数

标签 统计

c++ ×10

c ×3

char ×3

arrays ×2

pointers ×2

compiler-construction ×1

function ×1

gcc ×1

icc ×1

java ×1

return-type ×1

std ×1