int arr[20];arr是首地址名,相当于指针,这时不能再加&取地址符,不然就成了首地址的地址了。
正确表达:
int main() {
int arr[20] = {0};
int* p = arr;
printf("%d ", *p);
}
注意,当printf时应选择用*p而不是p,这是因为*是解引用操作符,*p指向的对象是arr,数组的首地址,而p指向的是一个随机值,因为我们并没有给它赋值过(并且不能直接给p赋值)。可以通过改变*p来改变数组的首地址值。
int main() {
int arr[20] = {0};
int* p = arr;
*p = 20;
printf("%d ", *p);
}
此外,strlen的while不能写成*p++,不然会往‘\0'后多移一位,因为这么写在*p等于0的时候,确实是不会进入到{}内部,但是*p在用完之后已经++了,所以正确的不能这么些,应该把++移到{}里来判断。
正确的如下