标签: pointers

如何将向量向量传递给期望指向(原始)指针的函数

我有一个函数接受指向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()).但是函数接口中指针的指针让我觉得这样的转换可能是不可能的.

谢谢,

亚伦

c++ pointers vector c++11

0
推荐指数
1
解决办法
477
查看次数

在C ++中获取给定指向它的指针的类型名的类型名

考虑以下代码:

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)

c++ templates pointers typename c++11

0
推荐指数
1
解决办法
424
查看次数

为什么参考数据类型指向?

考虑:

在此输入图像描述

我理解,对于原始数据类型,分配的内存(橙色矩形)包含您想要的内容,但对于引用数据类型,分配的内存包含指向您想要的内容的引用/指针.

为什么要这样设计呢?对于通常是参考数据类型(对象,数组等)的东西,为什么不把你想要的东西放在橙色矩形中呢?

java types pointers reference reference-type

0
推荐指数
1
解决办法
300
查看次数

空字符串和'\ 0'字符之间有什么区别?(从指针和数组的角度来看)

作为这个问题的标题?有什么不同?

如果我写:

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

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

为什么在直接指向变量作为指针时,为什么在C中创建指针?

我正在学习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 pointers idiomatic

0
推荐指数
1
解决办法
63
查看次数

什么是C指数对指针"*&"的引用

有人可以让我知道指针 "*&" 的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)

c pointers reference

0
推荐指数
1
解决办法
2478
查看次数

构造函数和成员函数中的指针返回不同的地址

我在编译程序时遇到问题.为什么指针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)

c++ pointers

0
推荐指数
1
解决办法
58
查看次数

在C中更改字符串数组中的字符

我尝试在字符串数组中将'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)

c arrays string pointers character

0
推荐指数
1
解决办法
101
查看次数

C指针值混合

我正在使用数据包捕获库,我已经将它打印出来的数据包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地址,但在方法调用期间似乎混淆了一些东西.有任何想法吗?

c pointers

0
推荐指数
1
解决办法
32
查看次数

C++使用动态数组将小写更改为大写

我正在尝试使用动态数组将小写单词更改为大写单词.在遇到"堆腐败"之前,我碰到了一些我没有遇到的事情.有人可以向我解释我做错了什么,可能有助于解决这个问题?

#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)

c++ pointers dynamic-arrays

0
推荐指数
1
解决办法
1349
查看次数