c编程必知

来源:互联网 发布:床上用品多久清洗 知乎 编辑:程序博客网 时间:2024/04/29 05:44

测试环境:ubuntu 12.1  编译器vim

1、char[] 和 char*

int main(){

    char * str = "asdfghjk";

    char s[5] = {'a', 's', 'd', 'f', 'g'};

    printf("%c\n",*str);

    printf("%s\n", str);

    printf("%p\n“, str);

    printf("%p\n", &str);

    printf("%p\n“, s);

    printf("%p\n", &s);

    for (int i = 0; i < 8 ; i++){

        printf ("%c", *("asdfghjk"+j));

    }

    return 0;

}

输出:

a

asdfghjk

0x8048640

0xbf86ab5c

0xbf86ab67

0xbf86ab67

a s d f g h j k

说明:

1、char × str 定义的是一个字符类型的指针,所以对str进行解引用得到的是 a ,而不是asdfghjk字符串;如果是以模式%s输出的话,将出现警告,甚至导致segment问题

2、str 表示的是当前字符串的首地址,对其进行%s输出,str将得到完整的字符串,它表示的是该字符串,能进行下标操作,但是超出范围容易导致段异常

3、str 表示的是当前字符串的首地址,对其进行%p输出,str将得到该字符串首地址

4、str 表示的是当前字符串的首地址,对其进行%p输出,&str将得到该指针的存储地址

5、s【5】表示的是一个字符数组,而s是该数组的名称,s其值刚好等于该数组的首地址,而非真正表示该数组的首地址

6、s【5】表示的是一个字符数组,而s是该数组的名称,&s是权威用法,但是就其简单,才一般用5所示s取其下标操作,是一个真正的地址类型

7、“asdfghjk"表示的是该字符串的名称,能进行下标操作,越界容易导致段异常问题,也可以写成"asdfghjk”【..】形式

0 0