指向char类型的指针的动态分配内存的指针的类型是什么?

问题描述 投票:1回答:3

我是C的新手。我需要分配内存并将指针存储在其中。这些指针的类型为char。那么指向该内存的指针的类型是什么?炭?还是长,因为地址就是数字?

c pointers dynamic-memory-allocation
3个回答
0
投票

指针具有指向所引用对象的指针的类型。内存的分配方式无关紧要。

示例

void *ptr = malloc(10);  // pointer to void

int c;
void *ptr = &c;          //pointer to void

int *ptr = malloc(sizeof(*ptr);  // pointer to integer
int *ptr = &c;                   // pointer to integer

char *cp = malloc(100);          // pointer to char
strcpy(cp, "Hello");

void foo(double *x)              // x is a pointer to double.
{
 /* .... */
} 

double **p;                      //pointer to pointer to double

/* etc etc */

0
投票

您将需要为calloc的char指针分配内存。

在此行

char *ptr[10]; //array of 10 pointers to char

此声明已经为这10个指针保留了空间,它们的大小是指向char的指针的大小,这取决于您的系统,对于64位系统,指针的大小为8个字节,对于32位,则为4个字节,这是通用的,根据实现的不同,这些值可能会有差异。

这里您将需要为10个指针分配空间,因此对于初始化为\0的10个字符的字符串,您可以这样做:

#include <stdlib.h>
//...

for(size_t i = 0; i < 10; i++){
    ptr[i] = calloc(0, sizeof(char) * 11);

[sizeof(char)可以删除,因为char类型的大小始终为1个字节:

for(size_t i = 0; i < 10; i++){
    ptr[i] = calloc(0, 11); 

就足够了,请注意,我为空终止符保留了一个额外的字符。

如果您要自己分配空间,则需要声明一个双指针:

char **ptr = calloc(NULL, sizeof(*ptr) * 10); // space for 10 pointers to char initialized with NULL.

其余部分相同

for(size_t i = 0; i < 10; i++){
    ptr[i] = calloc(0, 11); 

0
投票

假设我了解您的要求,听起来这就是您想要的:

#define N 10 // or however many elements you want
...
char **arr = malloc( sizeof *arr * N ); // sizeof *arr == sizeof (char *)

每个arr[i]将具有类型char *

如果要char的数组,则为

char *arr = malloc( sizeof *arr * N );

并且每个arr[i]将具有类型char

因此,一般规则,如果要分配类型为T的数组,请使用

T *arr = malloc( sizeof *arr * N );
© www.soinside.com 2019 - 2024. All rights reserved.