char类型只能存储单个字符,在C中要存储多个字符组成的字符串得用char*
或char[]
。区别是char*保存的是字符串常量,内容不能更改,所以得用char[]
- (void)strReverseTest{
char str[] = "32415";
int len = strlen(str);
for (int i=0; i<(len+1)/2; i++) {
char temp = str[i];
str[i] = str[len-1-i];
str[len-1-i] = temp;
}
NSLog(@"%s",str); // C中打印数组得for循环,不方便
}
- (void)strReverseTest2{
char str[] = "32415";
int len = strlen(str);
char *begin = str;
char *end = str+len-1;
while (begin<end) {
char temp = *begin;
*begin = *end;
*end = temp;
begin++;
end--;
}
NSLog(@"%s",str);
}
指针和字符数组
C中指针指向数组的时候表示指向数组中第一个元素,begin的值为第一个元素的地址。如下图begin==&str。
image.png
x 0x7ffee140d93a
读取内存地址中的值,并打印。
p *begin
把begin的值作为内存地址,打印该地址中的值。
两者都是打印内存地址的值,没有区别,x命令打印出的第一位33即为字符3的ASCII码51的16进制。
注意:直接打印p *(0x7ffee140d93a)
会格式报错error: <user expression 5>:1:1: indirection requires pointer operand ('long' invalid)
。需要改为p *((char*)0x7ffee140d93a)
网友评论