鱼C论坛

 找回密码
 立即注册
查看: 5006|回复: 13

困惑啊指针

[复制链接]
北北 该用户已被删除
发表于 2012-9-14 21:11:08 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-14 21:18:01 | 显示全部楼层
*string是string所指向的字符串的第一个字符的值,也即“i”
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-14 21:21:05 | 显示全部楼层
你说的情况,应该是字符串数组
#include <stdio.h>

void main()
{
    char *strArr[3];
        strArr[0] = "i am god!0";
        strArr[1] = "i am god!1";
        strArr[2] = "i am god!2";
    printf( "%s\n", *strArr );
}
打印i am god!0
小甲鱼最新课程 -> https://ilovefishc.com
北北 该用户已被删除
 楼主| 发表于 2012-9-14 21:24:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-14 21:49:15 | 显示全部楼层
北北 发表于 2012-9-14 21:24
可是string指向字符数字的首地址 string只是一个指针?

string指向字符串,同时它的值是第一个字符的地址。
它是首元素地址,同时也指向字符串,而不是指向首地址。
小甲鱼最新课程 -> https://ilovefishc.com
北北 该用户已被删除
 楼主| 发表于 2012-9-14 22:01:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
北北 该用户已被删除
 楼主| 发表于 2012-9-14 22:09:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-15 10:57:50 | 显示全部楼层
本帖最后由 贝壳 于 2012-9-15 11:04 编辑

楼主好像还没懂。其实:
      char *string;                        //定义指针
      string = "i am god!";          //从指针指向的地址开始,写入字符串,字符串用'\0'结尾,所以写入了10个字节
      printf( "%s\n", string );       //从指针指向的地址开始打印字符串,遇到字符串结束标志'\0'才结束打印

所以,string只指向首地址,不能代表整个字符串;*string只是字符串第一个字符的值,也就是'i';
printf( "%s\n", string )之所以能打印整个字符串是因为没有遇到结束打印的'\0'.
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-21 09:32:39 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(void)
  4. {
  5.     char *string;

  6.     string = "I am good!";

  7.     printf("%s\n", *string);

  8.     system("pause");
  9.     return 0;
  10. }
复制代码
这样会出错············
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-21 10:37:16 | 显示全部楼层
本帖最后由 无比菜鸟 于 2012-9-21 10:54 编辑

printf的函数原型是:
int printf( const char *format , ... );
1、上面原型括号中的 ...  是指可以接受多个参数;
2、那么对于 ...  这些参数 被 字符串常量(const char *format)中带有%格式的字符(常见%d、%s等)进行格式化;
3、楼主所说的打印字符串, 格式化的指定方式就是 %s,在原型中%s对应的参数应该是 char*, 也就是说是字符的指针(地址)而不是取这个取这个地址里的值;
4、string="I am good" 双引号在这里直接可以看作是取这个字符串的首个字符的指针;
5、小弟揣度楼主可能此时又产生个疑问,那么char*是指向的一个字符的指针(不是指向字符串),那为什么会打印出字符串,而不是只打印一个字符? 这是因为这里参数 char*指向你想打印的字符串的第一个字符的指针,而printf这个函数会找到这个地址后打印这串字符直到遇到NUL,所以就打印出了一个字符串;

另:NUL是ASCII字符集中‘\0’字符的名字,它的字节模式为全0;

综上printf函数中,%s对应的参数是指向字符串首个字符的指针

小甲鱼最新课程 -> https://ilovefishc.com
北北 该用户已被删除
 楼主| 发表于 2012-9-25 15:13:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
北北 该用户已被删除
 楼主| 发表于 2012-9-25 15:17:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-29 10:20:05 | 显示全部楼层
#include <stdio.h>

void main()
{
        char *string = "I am god !";
        while( *string != '\0') {
                printf( "%c", *string++ );
        }
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-29 10:33:08 | 显示全部楼层
第一,string是char型指针,所以*string是指向字符数组第一个字符 ,第二,打印字符串用的是字符串的首地址,string就是首地址
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-15 03:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表