常量字符串和指针

为了节省内存,C++把常量字符串单独放在一个内存区域,如果有几个指针指向相同的常量字符串时,它们实际上指向的是相同的内存地址。

而数组是要每一个数组单独占用一块内存的

 1 #include "stdafx.h"
 2 #include <iostream>
 3 using namespace std;
 4
 5 int _tmain(int argc, _TCHAR* argv[])
 6 {
 7     char str1[]="hello world";
 8     char str2[]="hello world";
 9     char *str3="hello world";
10     char *str4="hello world";
11     return 0;
12 }

时间: 2024-11-03 01:31:11

常量字符串和指针的相关文章

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是一个常指针,也

C中常量字符串使用以及g++的一个bug

const char*用于定义一个指向常量字符串的指针,通常形式为: const char* ptr = "hello"; 但可能很多粗心的朋友们没有注意到下面一种定义: const char* ptr2 = "hello"; ptr和ptr2指向的是同一片内存,即定义const char* ptr = "hello"并不等于创建新的常量字符串,而是试图返回一个常量字符串的访问地址,如果常量字符串不存在就创建常量字符串并返回常量字符串的地址,这种

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

第四章 数组,字符串和指针

数组 数组若没有指定初始值则为内存遗留值 如果指定了部分初始值,那么其余部分也默认被指定为0: long data[100]={0};          //给data数组的所有元素赋0 字符串是附加有特殊字符(/0)的字符序列 数组的填充: char president[]="thank you"; wchar_t president[]=L"thank you";     //Unicode字符串 const int max=80; char name[max]

黑马程序员——C语言小节------字符串与指针

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.字符串的初始化,字符串必须以"\0"结尾,"\0"的ASCII码值为0,例如: char name[] = "jack"; // "jack" == 'j'+'a'+'c'+'k'+'\0' // 都是字符串 char name[8] = "it"; char name2[8] = {'i', 't'

「C」 数组、字符串、指针

一.数组 (一)数组 概念:用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. (二)数组的定义 格式: 类型 数组名[元素个数]: 举例:存储5个人的年龄 int agrs[5];  // 在内存中开辟4x5=20个字节的存储空间 可以在定义数组的同时对数组进行初始化: int ages[5] = {17,18,19,20,21}: 遍历数组: for(int i = 0;i<5;i++) { printf(“ages[%

数组、字符串、指针的认识

1.C/C++中字符串都是以’\0’结尾的.稍不留神就会造成字符串越界, 例如: char str[9]; strcpy(str,”0123456789”); //其内容长度是11,而你的数组定 义长度只有10,在编程的时候,编译器不会报错,因为他不会检测你的长度 (至少Keil是这样的),数组是单独划分的一个用户内存区:然而如果你用下 面语句就会出问题了: while(str[i] == '\0'); 所以,一般在复制字符串时一定要为在字符串长度的基础上多申请一个字节内存给’\0‘ 2.但是字

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));//注意加括

指针进阶 - 字符串与指针 &amp; 数组与指针

昨天的随笔里忘记提的重要一点: 指针指向的地址是有长度的,但是指针就是个针,一个针只有一个针尖,只能指向一个地址. 当我们用这种方式测量指针长度时 char *pstring; printf("%d\n", sizeof(*pstring)); 实际上我们测的不是指针占据的内存大小,而是指针指向的数据占据的内存大小,哪怕为空.由于代码中是char型,所以输出结果为1. 当我们测量却忘记带 * 号时,如: printf("%d\n", sizeof(pstring))