小编Amu*_*umu的帖子

存储指针值

据我所知,当一个指针传递给一个函数时,它只是一个真实指针的副本.现在,我想要更改真正的指针,而不必从函数返回指针.例如:

int *ptr;

void allocateMemory(int *pointer)
{
     pointer = malloc(sizeof(int));
}

allocateMemory(ptr);
Run Code Online (Sandbox Code Playgroud)

另一件事,就是如何将内存分配给2个或更多维数组呢?不是通过下标,而是通过指针算术.这是:

int array[2][3];
array[2][1] = 10;
Run Code Online (Sandbox Code Playgroud)

同样如下:

int **array;
*(*(array+2)+1) = 10
Run Code Online (Sandbox Code Playgroud)

另外,为什么我必须传入指向函数的指针的内存地址,而不是实际的指针本身.例如:

int*a;

为什么不:

allocateMemory(*a) 
Run Code Online (Sandbox Code Playgroud)

allocateMemory(a)
Run Code Online (Sandbox Code Playgroud)

我知道我总是要这样做,但我真的不明白为什么.请向我解释.

最后一件事是,在这样的指针中:

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

是包含实际值的内存地址,还是指针的内存地址?我一直认为a是它指向的实际值的内存地址,但我不确定.顺便说一下,当打印这样的指针时:

printf("Is this address of integer it is pointing to?%p\n",a);
printf("Is this address of the pointer itself?%p\n",&a);
Run Code Online (Sandbox Code Playgroud)

c pointers memory-management

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

C中的联盟内存份额

Edit2:我可以用Union做多态吗?在我看来,我可以根据自己的需要更改数据结构.

编辑:修复代码.使用 "." 而不是" - >".我想问的是,如果有不同的数据类型(如int和char可以互换使用,如何确保正确存储值?由于两者具有不同的内存大小,需要更大内存空间的那个将为两者分配内存空间要共享的变量类型.

假设我有两个结构:

typedef struct a{
          int a;
}aType;

typedef struct b{
          char b;
}bType;

typedef union{
         aType a_type;
         bType b_type;
}ab;

int main(void){
         ab v1;
         v1.a_type.a = 5;
         v1.b_type.b = 'a'
}
Run Code Online (Sandbox Code Playgroud)

据我所知,aType和bType都将共享相同的内存.由于int有3个字节更大(int是4个字节,char是1个字节),因此它将有4个内存块.第一个是最左边,最后一个是最右边.我将'a'分配给v1的变量b的时间,它将保留在内存块的第一个块(最左边).值5仍然保留在第四块内存中(最右侧).

因此,当打印出来时,会产生垃圾值,不是吗?如果是这样,如何解决这个问题?通过这个问题,这意味着如果我将'a'存储到b_type中,共享内存必须确保仅具有该值'a',而不是前一个整数值5.

c unions

4
推荐指数
1
解决办法
3425
查看次数

标签 统计

c ×2

memory-management ×1

pointers ×1

unions ×1