c之指向常字符串的指针做加法

先看一小段代码

#include<string.h>
int main()
{
    size_t len = 0;
    const char* id = "abcdefghijklmn";
    len = strlen(id);
    if (len > 3)
    {
        id +=  len - 3 ;
    }
    return 0;
}

乍一看,觉得这段代码一定是有问题,id是一个指向常量字符串的指针,还能做加减?

但是,指针当然能做加减呀。id不是一个常指针,当然能够改变,就算id是一个常指针,也可以改变,但是这里就不讨论这个问题了。

id += len -3; //id向后移动len-3个char类型的长度,即len-3个字节

因此,id = "lmn"

这里id也可以做减法,但是减法会产生内存溢出,慎用。

时间: 2024-08-11 07:40:38

c之指向常字符串的指针做加法的相关文章

老问题了,函数返回指向常字符串的指针,形如 char *func()

摘自<c专家编程>,作为备忘 1. 直接返回简单的字符串 char *func() { return "Simple string demo!\n"} 这是最简单的解决方案,字符串常量存储在只读存储区,如果字符串需要通过计算得到,这种方式就不能使用 2. 使用全局字符数组 这种方式很容易理解,不多解释.但是全局变量尽量少用! 3. 使用静态数组,形如 char *func() { static char buffer[BUF_SIZE]; ... return buffer

cout 输出字符串(指针)常见问题及put,write函数

C++ ostream类为下面的指针类型定义了插入运算符函数: const signed char *; const unsigned char *; const char *; void *; C++用指向字符串存储位置的指针来表示字符串,指针的形式可以是char数组名,显式的char指针或用引号括起来的字符串. 下面是一个简单输出字符串的例子: #include <iostream> using namespace std; int main() { char name[] = "

指向指针的指针做函数的参数(转载)

一. 回顾指针概念:  今天我们又要学习一个叫做指向另一指针地址的指针.让我们先回顾一下指针的概念吧!  当我们程序如下申明变量:  short int i; char a; short int * pi; 程序会在内存某地址空间上为各变量开辟空间,如下图所示.  内存地址→6     7      8     9     10     11    12    13     14    15  ---------------------------------------------------

下列函数的功能是统计并返回形参指针S所指向的字符串所含字符‘A’的个数。

下列函数的功能是统计并返回形参指针S所指向的字符串所含字符‘A’的个数.试完成程序,写出应填写在程序空框中的代码. int counts(char *s) int n: for( n=0:. : s++) return n: 为统计字符指针s所指字符串包含的某字符的出现次数,必须用一个循环顺序考察整个字符串.由从指针s所指字符串的首字符开始,每考察一个字符后,指针s后移一个字符位置,考察循环直至字符率结束终止.所以填写在空框中的正确代码可写成*S!=‘\ 0’.由于字符串束符‘\ 0’的代码为

C++——指针---指向数组的指针---指向字符串的指针--指向函数的指针--指针的指针--指针的引用

一.指向数组的指针 代码示例1: 1 int main() 2 { 3 int a[10]={0,2,4,6,8,10,12,14,16,18}; 4 int *p; 5 for(p=&a[0];p<&a[0]+10;p++) 6 printf("%d ",*p); 7 } 代码示例2: int a[10]={0,2,4,6,8,10,12,14,16,18}; int *p; p=a; printf("%d\n",*(a+5));//注意加括

C语言基础学习5:字符串与指针

1.字符串的表示形式 (1)用字符数组存放一个字符串,然后输出该字符串. char string[] = "I am happy"; printf("%s",string); (2)用字符指针指向一个字符串. char *string = "I am happy"; printf("%s",string); 2.字符指针作函数参数 (1)用字符数组作参数 void CopyString(char from[], char to

字符串与指针{学习笔记}

<<用字符指针指向一个字符串: #include <studio.h>void main(){ char *string="hello,world!"; printf("%s\n",string ); return;} 例子:将字符串a复制成字符串b #include <studio.h>void main(){ char a[]="i am a boy",b[20]; int i; for (i=0;*(a+

指针参数--指针做参数时应该注意的地方

转自:http://blog.csdn.net/sszgg2006/article/details/9037675 首先看以下程序: [cpp] view plain copy #include <stdio.h> int *swap(int *px, int *py){ int temp; temp = *px; *px = *py; *py = temp; return px; } int main(void){ int i = 10, j = 20; int *p = swap(&

使用指针做形参来解决函数的副本机制

/*在函数里面改变一个外部变量,就需要变量的地址 如果是数据,需要指向数据的指针存储数据的地址 如果是指针,就需要指向指针的指针存储指针的地址 //二级指针一般用于改变一个字符串指针的指向,指向不同的字符串 */ #include<stdio.h> #include<stdlib.h> char str1[20] = "notepad";char str2[20] = "tasklist";/*   把这两个字符数组作为全局变量 */ //