我是 C 新手,无法理解指针。我感到困惑的部分是关于char *和int *。
比如我们可以直接给char赋值一个指针,比如
char *c = "c"; 它不会出错。
但是,如果我像刚才那样为 int 分配一个指针,例如int * a = 10;,
它会出错。我需要在内存中留出额外的空间来为 int 分配一个指针,
像int *b = malloc(sizeof(int)); *b = 20; free(b);……
谁能告诉我为什么?
我认为您误解了指针是什么以及它的含义。在这种情况下:
int* a = 10;
您是说“创建一个指针(指向 an int)并将其瞄准文字内存位置0x0000000A(10)。
这和这个不一样:
int n = 10;
int* a = &n;
即“创建一个指针(指向 an int)并将其瞄准n.
如果你想动态分配这个:
int* a = malloc(sizeof(int));
*a = 10;
这意味着“创建一个(指向 an 的int)指针并将其指向刚刚分配的内存块,然后将值分配给该位置10。
通常情况下,你从来没有分配一个int,你会分配一群人对一个数组,在这种情况下,你把它称作a[0]通过a[n-1]对大小的数组n。在 C*(x + y)中通常与 相同,x[y]或者换句话说*(x + 0)就是 just*x或x[0]。