标签: double-pointer

如何在C中输入指向char的指针数组?

假设我在C中有一个指向char的指针数组:

char *data[5] = { "boda", "cydo", "washington", "dc", "obama" };
Run Code Online (Sandbox Code Playgroud)

我希望使用qsort对这个数组进行排序:

qsort(data, 5, sizeof(char *), compare_function);
Run Code Online (Sandbox Code Playgroud)

我无法提出比较功能.由于某种原因,这不起作用:

int compare_function(const void *name1, const void *name2)
{
    const char *name1_ = (const char *)name1;
    const char *name2_ = (const char *)name2;
    return strcmp(name1_, name2_);
}
Run Code Online (Sandbox Code Playgroud)

我做了很多搜索,发现我必须**在qsort里面使用:

int compare_function(const void *name1, const void *name2)
{
    const char *name1_ = *(const char **)name1;
    const char *name2_ = *(const char **)name2;
    return strcmp(name1_, name2_);
}
Run Code Online (Sandbox Code Playgroud)

这很有效.

任何人都可以解释*(const char **)name1这个功能的使用吗?我根本不明白.为什么双指针?为什么我原来的功能不起作用?

谢谢,Boda …

c sorting qsort double-pointer

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

将内存分配给双指针?

我无法理解如何为双指针分配内存.我想读取一个字符串数组并存储它.

    char **ptr;
    fp = fopen("file.txt","r");
    ptr = (char**)malloc(sizeof(char*)*50);
    for(int i=0; i<20; i++)
    {
       ptr[i] = (char*)malloc(sizeof(char)*50);
       fgets(ptr[i],50,fp);
    }
Run Code Online (Sandbox Code Playgroud)

而不是这个我只是分配一个大的内存块并存储字符串

  char **ptr;
  ptr = (char**)malloc(sizeof(char)*50*50);
Run Code Online (Sandbox Code Playgroud)

那会错吗?如果是这样,为什么呢?

c string malloc pointers double-pointer

15
推荐指数
3
解决办法
6万
查看次数

在C#中从锯齿状数组转换为双指针

这里有一个简单的问题:有没有办法从锯齿状数组转换为双指针?

例如,转换double[][]double**

不幸的是,这不能仅仅通过铸造(就像它可以在普通的旧C中)一样.使用fixed语句似乎也无法解决问题.在C#中是否有任何(最好尽可能高效)的方法来实现这一目标?我怀疑解决方案可能不是很明显,尽管我希望尽管是直截了当的.

c# arrays pointers jagged-arrays double-pointer

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

Char ** 用法和打印

在 C 中,我使用 achar **来保存一系列字符串。

这是我的代码:

char ** c;
//now to fill c with data ????

//cannot change:
printf ("%*s%s", 0, "", *c);
while (*++w)
    printf (" %s", *c);
Run Code Online (Sandbox Code Playgroud)

我不知道如何填充c数据。正确的方法是什么?我无法更改 3 条打印行,因为它们位于外部函数中。

c malloc double-pointer multidimensional-array

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

双指针实现二维数组实现

请考虑以下代码:

#include <stdio.h>
#include <stdlib.h>

#define NUM_ARRAYS     4
#define NUM_ELEMENTS   4
#define INVALID_VAL   -1

int main()
{
   int index            = INVALID_VAL;
   int array_index      = INVALID_VAL;
   int **ptr            = NULL;

   ptr = malloc(sizeof(int*)*NUM_ARRAYS);

   if (!ptr)
   {
      printf ("\nMemory Allocation Failure !\n\n");
      exit (EXIT_FAILURE);
   }

   for (index=0; index<NUM_ARRAYS; index++)
   {
      *(ptr+index) = malloc(sizeof(int)*NUM_ELEMENTS); 

      if (!*(ptr+index))
      {
         printf ("\nMemory Allocation Failure !\n");
         exit (EXIT_FAILURE);
      }
   }

   /* Fill Elements Into This 2-D Array */
   for (index=0; index<NUM_ARRAYS; index++)
   {
      for (array_index = 0; …
Run Code Online (Sandbox Code Playgroud)

c double-pointer multidimensional-array

8
推荐指数
2
解决办法
5万
查看次数

reinterpret_cast无效是合法的*

我正在查看https://en.cppreference.com/w/cpp/language/reinterpret_cast,我注意到它指定了我们可以始终转换为的合法类型:

  • byte*
  • char*
  • unsigned char*

但我并没有看到void*在列表中。这是疏忽吗?我的用例需要一个,reinterpret_cast因为我是从int**转换为void*。我最终会从void*后面投射到镜头上int**

c++ pointers void-pointers double-pointer reinterpret-cast

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

unsigned char**to opencv mat

我几乎在那里,但我不太明白如何转换

unsigned char ** to a cv::Mat
Run Code Online (Sandbox Code Playgroud)

我知道cv :: Mat的.data部分是uchar*

我正在使用一个以...形式返回和图像的函数

unsigned char ** output;
Run Code Online (Sandbox Code Playgroud)

但我的其余代码使用cv :: Mat's.我没有我使用的lib的源代码,所以不知道它在做什么.

编辑 感谢帮助人员,我已经完成了这个......

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, *output);
imshow("this is a test",TempMat);
Run Code Online (Sandbox Code Playgroud)

但是图像是黑色的,所以我现在需要找出是否有任何东西存在.

很抱歉由于缺乏研究我在紧迫的期限内,不是不是家庭作业,试图准备好向教授展示结果!

c++ opencv image-processing double-pointer

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

如何用双指针声明NSString的变量

我想使用双指针,我试图像这样声明.

NSString **a;
Run Code Online (Sandbox Code Playgroud)

但是,Xcode向我展示了错误"指向非const类型'NSString*'的指针,没有明确的所有权"并且无法编译.

最后我想这样做.

NSString **a;
NSString *b = @"b";
NSString *c = @"c";
a = &b;
*a = c;

NSLog(@"%@",b);//I wanna see "c"
Run Code Online (Sandbox Code Playgroud)

请告诉我任何建议.

variables objective-c double-pointer ios automatic-ref-counting

6
推荐指数
1
解决办法
1876
查看次数

如何在COBOL中编写SQLite回调

我是COBOL程序员,我的最新项目是将COBOL应用程序连接到SQLite3数据库.

我一直在关注本指南,他们的解决方案正是我在COBOL应用程序中所需要的.我已成功设法创建,连接,插入数据和关闭数据库,但当我尝试从数据库中选择数据时出现问题.

在本教程中,他们使用带有双指针的回调.

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
   int i;
   for(i=0; i<argc; i++){
      printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
   }
   printf("\n");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在COBOL中的解决方案如下

   WORKING-STORAGE SECTION.
  *----------------------------------------------------------------*

   01 sqlite3-db         pointer.
   01 err_msg            pointer.
   01 sqlite             pointer.
   01 res                pointer.

   01 notused            pointer.
   01 argc               pic 99 comp-5.
   01 argv               pointer.
   01 azColName          pointer.
   01 Writefunction-Ptr  procedure-pointer.

   procedure division.
          set Writefunction-Ptr to entry "sqlite-callback".

          *>Random code.

          call "sqlite3_exec" using
             by …
Run Code Online (Sandbox Code Playgroud)

sqlite cobol double-pointer

6
推荐指数
1
解决办法
515
查看次数

在 C# 中,Span&lt;Span&lt;T&gt;&gt; 的有效等价物是什么,但它不存在?

我将一些较旧的高速 C++ 代码移植到 C#,现有代码使用了这样的基于指针的双间接模式(此处以 C# 语法编写),使用堆栈作为高效的临时存储:

\n
public struct Source {\n    public byte* Start;\n    public int Count;\n}\n\npublic struct SourceSet {\n    public Source* Start;\n    public int Count;\n}\n\nSource* sources = stackalloc Source[n*k];\nSourceSet* sourceSets = stackalloc SourceSet[n];\n
Run Code Online (Sandbox Code Playgroud)\n

sources它用数据段的集合填充,并用每组中有sourceSets多少个来填充 。Source

\n

该代码工作正常,但理想情况下,我想将其转换为不再使用指针和unsafe\xe2\x80\x94 来代替使用像这样的内存安全的东西,其中每个都由一个源SourceSet填充:.Slice()

\n
public struct Source {\n    public int Start;\n    public int Count;\n}\n\nSpan<Source> sources = stackalloc Source[n*k];\nSpan<Span<Source>> sourceSets = stackalloc Span<Source>[n];\n
Run Code Online (Sandbox Code Playgroud)\n

但我不能这么写,因为Span<Span<T>>C# 中不能存在 \xe2\x80\x94Span<T>是 a ref struct,因此不能用作 …

c# double-pointer stackalloc memory-safety

6
推荐指数
1
解决办法
308
查看次数