我有一个函数接受指向double的指针:
void Foo(double ** m); // expects a 3x3 matrix of doubles
Run Code Online (Sandbox Code Playgroud)
是否有可能,通过适当的转换和诸如此类的方法,将std :: vector的std :: vector传递给double或者std :: array of std :: arrays of double?如果是这样,有人可以解释一下吗?
std::vector<std::vector<double>> v(3, std::vector<double>(3));
std::array<std::array<double, 3>, 3> a;
Run Code Online (Sandbox Code Playgroud)
如果函数只接受指向double的指针,那么这是可能的.(通过v.data()或a.data()).但是函数接口中指针的指针让我觉得这样的转换可能是不可能的.
谢谢,
亚伦
考虑以下代码:
class c {
//...
};
template <typename T>
void f(T k)
{
auto item = new T;
//...
}
Run Code Online (Sandbox Code Playgroud)
我们声明一个类c和一个f创建新对象类型的模板函数T。
我想更改此函数,f以便template参数可以是指针类型,它将按以下方式使用:
auto ptr = new c;
f<c*>(ptr);
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试创建一个新项目时出现了问题auto item = new T;,因为现在T是指向的指针的类型名c。
我知道T它将永远是指向某个东西的指针,我怎样才能得到所指向的类型名T?我想做类似的事情:
template <typename T>
void f(T k)
{
// If T = int* -> Q = int
typename ??????? Q; // <<<<<<<<
auto item …Run Code Online (Sandbox Code Playgroud) 考虑:

我理解,对于原始数据类型,分配的内存(橙色矩形)包含您想要的内容,但对于引用数据类型,分配的内存包含指向您想要的内容的引用/指针.
为什么要这样设计呢?对于通常是参考数据类型(对象,数组等)的东西,为什么不把你想要的东西放在橙色矩形中呢?
作为这个问题的标题?有什么不同?
如果我写:
char *cp = "a";
cout << (cp == "a") << endl;
Run Code Online (Sandbox Code Playgroud)
要么:
string str = "a";
cout << (str == "a") << endl;
Run Code Online (Sandbox Code Playgroud)
它们是相同的,都归于真.但如果我写:
char *cp = "";
cout << (cp == "\0") << endl;
Run Code Online (Sandbox Code Playgroud)
它返回false.但:
string str = "";
cout << (str == "\0") << endl;
Run Code Online (Sandbox Code Playgroud)
它返回true.
我认为它们应该从指针和数组的角度来看是一样的.但事实证明它们是不同的.他们之间有什么微妙的区别?我应该如何编写一个char数组来表示一个空字符串?
好吧,上面的内容可能不清楚,就像有人说它可能是"编译器优化".
我真正想要的是这个:
char *cp = "abcd";
Run Code Online (Sandbox Code Playgroud)
可以给我一个像这样的数组:['a','b','c','d','\ 0'].我想知道如何使用类似的语法来获得这样的数组:['\ 0'].因为我试过:
char *cp = "";
Run Code Online (Sandbox Code Playgroud)
而且似乎不是正确的代码.我认为它可以给我我想要的东西.但事实并非如此.
对不起,线路上方的模棱两可.我是新手,我不是那可能是编译器优化.
我正在学习C并且遇到了一个例子,它似乎创造了一个不必要的步骤,但我又是新手.
他创建了一个变量,然后是一个指向该变量的专用指针.我的理解是你可以简单地在变量前加一个*,它将作为指向它的指针......那么为什么要使用另一行代码来创建指针?具体来说,我在谈论为什么他创建指针"*p"只是为了引用"x"而不是说*x指向它.以下是示例代码:
#include <stdio.h>
int main()
{
int x; /* A normal integer*/
int *p; /* A pointer to an integer ("*p" is an integer, so p
must be a pointer to an integer) */
p = &x; /* Read it, "assign the address of x to p" */
scanf( "%d", &x ); /* Put a value in x, we could also use p here */
printf( "%d\n", *p ); /* Note the use of the * to get the …Run Code Online (Sandbox Code Playgroud) 有人可以让我知道指针 "*&" 的C等价物吗?
换句话说,如果我的函数在C++中是这样的:
void func(int* p, int*& pr)
{
p++;
pr++;
}
Run Code Online (Sandbox Code Playgroud)
在C中转换它时,我如何更改第二个参数?
更新: @MikeDeSimone:如果我理解了翻译的代码,请告诉我?让我从初始化变量开始:
int i = 10;
int *p1 = &i;
int **pr= &p1;
Run Code Online (Sandbox Code Playgroud)
所以,当你执行(*pr)++时,这基本上相当于:
(p1)++
Run Code Online (Sandbox Code Playgroud)
但是,我无法理解main()内部的外观如何?
问题2:如果我有这样的代码片段,我该怎么办?
void pass_by_reference(int*& p)
{
//Allocate new memory in p: this change would reflect in main
p = new int;
}
Run Code Online (Sandbox Code Playgroud) 我在编译程序时遇到问题.为什么指针intArray在同一对象的构造函数和成员函数display()中给出不同的地址?谢谢!
#include<iostream>
using namespace std;
class MyClass
{ private:
int* intArray;
int arraySize;
public:
MyClass(int*,int);
~MyClass()
{delete []intArray;};
void display();
};
MyClass::MyClass(int intData[],int arrSize)
{ int *intArray = new int[arrSize];
cout<<intArray<<" "<<endl;
};
void MyClass::display()
{ cout<<intArray<<" "<<endl;
}
int main()
{ int Data[10]={9,8,7,6,5,4,3,2,1,0};
MyClass obj1(Data,10);
obj1.display();
}
Run Code Online (Sandbox Code Playgroud) 我尝试在字符串数组中将'a'字符更改为'e'.但我收到一个错误*pos = 'e'; 行.它说"Main.exe已停止工作".我无法理解这个问题.你有什么主意吗?
int main(void) {
char *sehirler[] = { "Istanbul", "Ankara", "Izmir", "\0" };
int i;
for (i = 0; *sehirler[i] != '\0'; ++i) {
char *pos = sehirler[i];
while (*pos != '\0') {
if (*pos == 'a') {
printf("%c", *pos);
*pos = 'e'; //ERRROR
}
pos++;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用数据包捕获库,我已经将它打印出来的数据包IP地址到控制台使用它正常工作:
printf(" From: %s\n", inet_ntoa(ip->ip_src));
printf(" To: %s\n", inet_ntoa(ip->ip_dst));
Run Code Online (Sandbox Code Playgroud)
下面几行我用不同的.C文件调用一个方法,使用它传递IP地址和端口号:
addpacket(0, inet_ntoa(ip->ip_src), inet_ntoa(ip->ip_dst), ntohs(tcp->th_dport));
Run Code Online (Sandbox Code Playgroud)
方法是: void addpacket(int table, char *srcIP, char *dstIP, int port) {...}
但是在addpacket方法中我将这个打印到控制台:
printf("---------------------SRC:%s\n", srcIP);
printf("---------------------DST:%s\n", dstIP);
printf("---------------------PRT:%i\n", port);
Run Code Online (Sandbox Code Playgroud)
我得到这样的结果:
---------------------SRC:192.168.1.64
---------------------DST:192.168.1.64
---------------------PRT:60549
Run Code Online (Sandbox Code Playgroud)
其中源和目标IP地址始终相同.我找不到任何混合起来的地方.如果我在原始.C文件中将其打印到控制台,则会显示正确的IP地址,但在方法调用期间似乎混淆了一些东西.有任何想法吗?
我正在尝试使用动态数组将小写单词更改为大写单词.在遇到"堆腐败"之前,我碰到了一些我没有遇到的事情.有人可以向我解释我做错了什么,可能有助于解决这个问题?
#include <iostream>
#include <cctype>
#include <new>
#include <string>
using namespace std;
int main()
{
int i;
int w;
char *p;
string str;
cout << "Change lowercase to UPPERCASE!" << endl;
cout << "Enter Word: ";
cin >> str;
w = str.length();
p = new (nothrow) char[w];
if (p == nullptr)
cout << "Error: memory could not be allocated" << endl;
else
{
cout << "Re-Enter Word: ";
cin >> p[w];
for (i = 0; i < w; i++)
cout …Run Code Online (Sandbox Code Playgroud)