C 指针 数组 字符(串)

首先看下C中的字符串是怎么定义的

参考链接(https://m.runoob.com/cprogramming/c-strings.html?ivk_sa=1024320u)

在 C 语言中,字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

字符串(character string)就是一个或多个字符的序列。 C没有专门定义字符串的变量类型,而是把它存储在char数组中。存储字符串的数组的最后一个元素是\0,这个字符是空字符(null character),用来标记字符串的结束。空字符不是数字0,它是非打印字符,它的ASCⅡ码值为0。

使用 printf() 与 %c 格式化输出单个字符。

下面的声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 RUNOOB 的字符数多一个。

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};

依据数组初始化规则,您可以把上面的语句写成以下语句:

char site[] = "RUNOOB";

以下是 C/C++ 中定义的字符串的内存表示:
C中字符串的内存表示

然后再看如何给字符数组赋值

分两种情况,单字符赋值和字符串赋值。
单字符赋值,可通过数组下标方式或指针方式,引用数组元素,进行赋值,如:

char a[10];
char ch='a';
for( i=0;i<10;i++ )
     a[i]=ch+i ; //可通过数组下标引用数组元素,完成赋值
char *p;
for( p=a; p<a+10; p++ )
    *p=ch++; //通过指针对数组相应元素赋值

字符串赋值,可使用string.h头文件中的字符串操作函数进行赋值,如:

char a[10];
strcpy( a, "abcdefgh");
sprintf(a, "%s", "abcdefgh");

注意:数组在定义时,可以同时进行初始化,但定义完成后,就不能按初始化的形式对其赋值了,如:

char a[10]="abcdefgh"; //这样可以
a="abcdefgh"; //这样是错误的!a是数组名,是一个静态数据:数组首地址值,可以看作是个常数,不能再被改变。
总结:

经过我的实践,发现如果定义字符数组的时候,如果把字符数组的所有位都填上字符,那么,当输出这块字符串的时候,它会识别该次的字符一直到该处地址为null的时候才停。
所以使用字符数组时就需要特别注意最后这串字符串的null的位置。
举例:

char str1[] = "ops"; //(str1+3)这个地址就是null即\0
char str2[3] = {'s', 'k'}; //(str2+2)这个地址就是null即\0

当定义了一个字符数组char str[n],实际可用的字符串长度是(n-1)个字符。

另外一个就是有关字符串和指针的关系,

/*
*  Pointer : int string
*/
int test_pointer(void) {
    int a =1;
    char b ='y';
    char str[] = "test";
    char* Pn;

    Pn = str;
    // Pn<=>str<=>&str[0]
    printf("取地址(指针) = %d \n", Pn);
    printf("数值 = %d \n", Pn);
    printf("字符 = %c \n", *(Pn+1));
    printf("字符串 = %s \n\n", Pn+1);
    return SUCCESS;
}

输出

取地址(指针) = 6421979 
数值 = 6421979 
字符 = e
字符串 = est

所以Pn<=>str<=>&str[0]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现C语言字符数组字符倒序输出,可以通过以下步骤来完成: 1. 首先,声明一个字符数组来存储字符。例如,可以使用`char str[] = "Hello World";`来初始化一个字符。 2. 然后,使用一个循环来计算出字符的长度。可以使用`strlen()`函数来获取字符的长度,需要包含头文件`<string.h>`。 3. 接下来,使用一个新的字符数组来存储倒序后的字符。可以声明一个与原字符长度相同的字符数组,用于存储倒序后的字符。 4. 使用两个指针,一个指向原字符的开头位置,另一个指向倒序后字符的末尾位置。 5. 在一个循环中,从原字符的末尾开始,逐个字符复制到倒序后的字符中,直到原字符的开头位置。同时,要记得将倒序后字符指针向前移动。 6. 最后,在循环结束后,倒序后的字符就存储在新的字符数组中。可以使用`printf()`函数输出倒序后的字符。 下面是一个示例代码实现: ```c #include <stdio.h> #include <string.h> int main() { char str[] = "Hello World"; int length = strlen(str); // 计算字符的长度 char reverseStr[length + 1]; // 创建一个新的字符数组来存储倒序后的字符,+1 是为了存储结束符'\0' char *pSource = str + length - 1; // 指向原字符的末尾位置 char *pDestination = reverseStr; // 指向倒序后字符的开头位置 while (length > 0) { *pDestination = *pSource; // 从原字符复制字符到倒序后的字符 pSource--; // 移动原字符指针 pDestination++; // 移动倒序后字符指针 length--; // 字符长度减1 } *pDestination = '\0'; // 添加字符结束符 printf("倒序输出的字符:"); printf("%s", reverseStr); return 0; } ``` 以上就是使用C语言实现字符倒序输出的详细步骤和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值