您的位置:首页 > 移动开发 > Objective-C

【IOS 开发学习总结-OC-7.9-★】 objective-c——字符串与指针

2015-09-15 19:46 549 查看

使用字符指针保存字符串

C语言允许使用字符串指针来保存字符串.

我们可以定义一个字符指针变量,让后将C格式的字符串赋给改指针变量。示例代码:

#import <Foundation/Foundation.h>

int main(int argc , char * argv[])
{
    @autoreleasepool{
        char* str = "I love iOS";
        NSLog(@"%s" , str);
        // 让str指向第7个元素
        str += 7;
        NSLog(@"%s" , str);
    }
}


示例中的 char *str 定义的是字符指针变量,而不是一个字符串变量。C 语言中没有字符串类型! C 语言的字符串在底层依然是采用字符数组进行保存。指针变量 str, 指向该字符数组的第一个元素(该数组的首地址),当程序使用%s 输出字符串时,系统会自动输出紧跟该字符指针所指元素的每个元素,知道遇到‘\0’为止。




编译,运行程序后,看到如下输出:

I love ios

ios

字符指针作为函数参数

当函数需要字符数组作为参数时,可声明使用 char* 形参。如下示例程序:

#import <Foundation/Foundation.h>

// 定义函数,使用字符指针作为参数
void copyString(char* to , char* from)
{
    // 如果from指针指向的字符不为\0。
    while(*from)
    {
        // 将from变量指向的字符赋给to变量指向的元素
        *to++ = *from++;
    }
    *to = '\0';
}
int main(int argc , char * argv[])
{
    @autoreleasepool{
        char* str = "www.crayit.org";
        char dest[100];
        // 将str赋值到dest中
        copyString(dest , str);  //①
        NSLog(@"%s" , dest);//结果为:www.crayit.org
        // 将字符串复制到dest中
        copyString(dest , "Objective-C is Funny!");  //②
        NSLog(@"%s" , dest);//结果为:Objective-C is Funny!

    }
}


有上门程序可以看出,字符数组和字符指针变量在很多地方可以彼此代替。但要注意以下几点:

1. 字符数组底层每个字符对应一个数组元素;而字符指针指向字符数组时,只存放字符数组的首地址。

2. 字符数组只在定义时赋值。而字符指针可以重复赋值。

比如:对于字符数组来说:
char[] str="baidu.com";
是正确的。而

char[50] str;


str ="baidu.com";
是错误的。

对于字符指针:

char *str="www.sina.com";


char* str;


str="www.sina.com";
是等价的,2种方式都是可以的。

3. 定义一个字符数组时,程序会为每个数组元素分配内存空间,但定义字符指针变量时,程序只是定义一个指针变量,该指针变量所指向的内存单元是不确定的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: