char *(arr [5])和char(* arr)[5]之间的区别

时间:2017-01-14 06:09:56

标签: c arrays pointers memory-management

似乎我几乎不知道它们之间的区别 char *(arr[5])char (*arr)[5] 逻辑上,与类型定义一样,char *(arr[5])是指向5 char的数组的指针,char *arr[5]char指针的数组然后那么(*arr)[5]会是什么?或者没有区别?

我做了一些测试,发现这3个声明是不同的。 例如,如果我使用char (*arr)[5],那么它完全允许我执行arr = malloc(2),否则它会嘲笑非法转换。

有人可以解释这些声明之间的差异,当它们被使用时,如果这还包括我可以arr = malloc(2)动态分配[5]字符数组,这将是一个巨大的优势,因为它允许我尽管在使用时给我堆栈溢出,但在语义上这样做char (*arr)[5](免责声明:[]建议堆栈分配,所以它没有多大意义,因为堆内存地址不能指向堆栈内存地址,因为我不知道)

1 个答案:

答案 0 :(得分:0)

<div class="row" > <div class="col-sm-12 col-lg-6" > <div class="form-group"> <div class="input_container"> <label for="inputEmail">¿Cuál es la especialidad que buscas? </label> <input type="text" class="form-control" id="especialidad_doctor" autocomplete="off" name="especialidad_doctor" onkeyup="autocomplet()" placeholder="Ejemplo: Pediatría" required> <ul id="especialidad_id"></ul> </div> </div> </div> </div> 等于char *(arr[5]),这意味着你有一系列指针,每个指针都指向一个字符,因此char *arr[5]可以指向一个字符而arr[0]可以点一个角色等等。 例如,您可以编写如下代码:

arr[1]

但是char *(arr[5]);// or char *arr[5] char a = 'a',b='b',c='c'; arr[0] = &a; arr[1] = &b; arr[2] = &c; printf("a=%c b=%c c=%c \n",*arr[0],*arr[1],*arr[2]); 表示你有一个包含5个字符的数组,你想指出它 例如,您可以编写如下代码:

(*arr)[5]