美文网首页
char和char *

char和char *

作者: 请叫我魔法师 | 来源:发表于2017-11-15 15:04 被阅读0次

星号 * 和取地址符&的关系

1.星号 * 代表一个内存地址,是一个数字 ,说明这个变量是个指针。
比如 char c = 'c';
int *p = &c;
p就是指针变量。是一个地址。比如0x1110011,还是个数字。
用 * p表示指向这个地址的结果,就是这个地址上存放的数据。
所以 * p 的打印结果是 'c';

2.取地址符号&是对变量取地址,得到这个变量的地址。
比如 int *p = &c;&c就是得到了"c"这个数据在内存中的地址。
*p 的打印结果 'c',根据指针得到数据。

所以星号 *+指针 结果是数据,&+数据 结果是地址。
至于二级指针啥的,道理一样。指针是个基本数据类型,代表数据的内存地址。

一、简单定义一个char类型的字符

    char ca = 'a';
//    int ca = 97;
    printf("值 = %c\nASSIC码 = %d\n十六进制地址 = %p\n十进制地址 = %ld\n", ca, ca, &ca, &ca);
结果如下 字符的打印.png

在ASSCI的范围内127以下,每个字符都对应了一个数字。所以char类型可以说是int数字类型的。代码中用int定义ca,打印结果一样。
所以在ASSCI范围内,数字和字符本质上一样的。只是显示形式不一样。
比如a和97,如果想用字符的形式就用%c,如果想使用数字就用%d。
直接对这个变量打印,如果用%c形式显示字符,如果用%d打印就显示数字。
PS:十六进制地址和十进制地址结果数值相等。十进制看着方便些。

二、字符串

1.用数组形式定义数组
    char str1[] = "123abc";
    printf("%s\n直接打印 = %ld\n地址 = %ld\n\n", str1, str1, &str1);

    char first = str1[1];
    printf("%c\nASSIC码 = %d\n地址 = %ld\n", first, first, &first);

结果


数组打印.png

可以看出,直接对字符串打印,显示内存地址,和取到的地址结果一样。

2.用指针形式定义字符串
    char *str = "abc123";
    printf("%s\n地址 = %ld\n首字符 = %c\n首字符地址 = %ld\n\n",str, str, *str, &*str);

    while (*str != '\0') {

        printf("ASSIC码 = %d  值 = %c 地址 = %ld\n", *str, *str, str);
        str++; //地址+1
    }
结果: 指针形式的字符串.png

用指针形式定义字符串,表示了一个指向一个字符串的地址。其实这个地址指向了字符串的首字母。有了首字母的地址就相当于这个字符串的地址。就像你和你的家庭,知道了你的位置,就知道了你整个家庭的位置一样。
星号 * str就是首字母。&*str就是首字母的地址,和str是同一个地址。

下面遍历字符串。str是首字母地址,每次自加1,表示紧挨着的下一个地址,指向了下一个字符。结果显示,首字母地址和str一致,更加证明了指针形式的字符串,指针是字符串的首字母地址。

相关文章

  • char [] 和 char*

    作者按:无参考价值。 今天在看紫书时候,发现作者在WERTYU题目和Palindrome题目中定义了以下三个变量:...

  • char和char *

    星号 * 和取地址符&的关系 1.星号 * 代表一个内存地址,是一个数字 ,说明这个变量是个指针。比如 char ...

  • const char* 和 char*

    char *向const char *转化 char * 向const char *可以直接赋值 const ch...

  • char * 和char[]的区别

    如下代码块char pngPath[10]; 在下面的sprintf函数中报错了但是char *pngPath可...

  • char * 和 char []的区别

    区别: 1:char* s1=”abc”;s1是一个指针,s1所指向的地址的内容是不可改变的,但是s1可以指向其他...

  • 无标题文章

    char * strcopy(char * a,char * b){ char * c = a; wh...

  • C | char* and char[]

    char[] 就是普普通通的字符数组char* 却是王子一般的字符指针你如果把一个字符串赋值给char* 类型的...

  • char s[]和char *s区别

    在一次做题中,遇到的改错题,编译是成功的,但是运行会失败。 实现hallo,world变成hello, world...

  • char*str 和 char[]str空间

    char*是在全局分配的,它的内容是不允许改变的。char[]是栈空间分配的,可以改变。当然了,char的地址是不...

  • C语言str几个常用方法总结

    #include 拷贝方法char* strcpy(char* dest,char* src){ char* r...

网友评论

      本文标题:char和char *

      本文链接:https://www.haomeiwen.com/subject/bzecvxtx.html