malloc的指针数组是什么意思?

时间:2017-03-10 18:42:09

标签: c

unsigned char *dup = malloc(size);

我的问题可能很天真。 dup[2]是什么意思?它是指向malloced内存中第三个char的指针,还是来自malloced内存的第三个char的值?我搜索过谷歌,但没有找到结果来解释这一点。非常感谢你的时间。

3 个答案:

答案 0 :(得分:1)

dup[2]*(dup + 2)在语义上完全相同。所以它是dup指向的第三个字节的值。也就是说,内存地址是:

dup, dup+1, dup+2, ....., dup+size-1

请注意,malloc不会初始化返回的内存,因此严格来说,dup[2]的值可能是任何值。

答案 1 :(得分:1)

  

它是来自malloced内存的第三个char的值吗?

此。

dup[2]相当于*(dup + 2)+ 2隐式表现为+ 2 * sizeof(char)

如果你想要一个指向内存中第三个字符的指针,而不需要解除引用它,那么你只需使用与上面相同的内容。没有解除引用运算符:

unsigned char *thirdChar = dup + 2;

答案 2 :(得分:0)

显然,dup[k]在这种情况下表示字符串的第三个字符,与*(dup + 2)非常相似。

支持代码如下:

#include<stdio.h>
#include<string.h>

int main() {

unsigned char *dup = malloc(10);
scanf("%s", dup);
printf("%c", dup[2]);
printf("\n%c", *(dup+2));
   return 0;
}

两个printf语句的输出相同,它非常清楚。