似乎我几乎不知道它们之间的区别
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]
。 (免责声明:[]
建议堆栈分配,所以它没有多大意义,因为堆内存地址不能指向堆栈内存地址,因为我不知道)
答案 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]