unsigned char *dup = malloc(size);
我的问题可能很天真。 dup[2]
是什么意思?它是指向malloced内存中第三个char的指针,还是来自malloced内存的第三个char的值?我搜索过谷歌,但没有找到结果来解释这一点。非常感谢你的时间。
答案 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
语句的输出相同,它非常清楚。