字符串常量与地址

代码:

#include <stdio.h>
#include <stdlib.h>

// 字符串常量属于静态存储(static storage)类
// 静态存储类是指如果一个函数中使用字符串常量,即使多次调用这个函数,该字符串在程序的整个运行过程中只存储一份

int main(void) {

	const char * s1 = "Hello World";
	const char * s2 = NULL;

	printf("value = %s, address = %p\n", s1, s1);

	s2 = s1;
	printf("value = %s, address = %p\n", s2, s2);

	printf("value = %s, address = %p\n", "Hello World", "Hello World");

	return EXIT_SUCCESS;
}
时间: 2024-11-07 09:58:51

字符串常量与地址的相关文章

Java中字符串常量池的陷阱

public class TestCase { static String ab = "ab"; static String getA() { return "a"; } static String getAB() { return "ab"; } public static void main(String[] args) { // 1 String _ab = new String("ab"); System.out.pr

C语言中字符串常量到底存在哪了?

常量存储总结局部变量.静态局部变量.全局变量.全局静态变量.字符串常量以及动态申请的内存区 1.局部变量存储在栈中2.全局变量.静态变量(全局和局部静态变量)存储在静态存储区3.new申请的内存是在堆中4.字符串常量也是存储在静态存储区 补充说明:1.栈中的变量内存会随着定义所在区间的结束自动释放:而对于堆,需要手动free,否则它就一直存在,直到程序结束:2.对于静态存储区,其中的变量常量在程序运行期间会一直存在,不会释放,且变量常量在其中只有一份拷贝,不会出现相同的变量和常量的不同拷贝. =

字符串常量强制转换为字符指针

一.实验代码 #include <stdio.h> void print(char s[]); int main() { print((char *)"abcdef"); return 0; } void print(char s[]) { printf("%s\n",s); } 二.实验结果 输出:abcdef 三.调试现象 三.结论 字符串常量强制转换为字符指针,是将字符串常量的地址作为这个指针值.至于这个常量的位置还不太确定.

java字符常量与字符串常量的区别

形式上:字符常量是单引号引起的一个字符例:‘a’字符串常量是双引号引起的若干个字符"helloworld"含义上:字符常量相当于一个整形值(ASC||值),可以参加表达式运算,直接拿变量使用字符串常量代表一个地址值(该字符在内存中存放的位置)占内存大小:字符常量只占一个字节字符串常量占若干个字节字符型常量使用char型变量来存储字符串用char型的数组来存储 类型字符类型为char,字符串类型为string两者都是常量,区别于使用方法的不同

【C】字符串常量和字符数组

此次博客是转载某位博主的文章,不过现在找不到了,所以先声明一下. 先贴一段代码: #include <stdio.h> int main(int argc, const char** argv) { char str_1[6] = "Crazy1"; char* str_2 = "Crazy2"; if (str_1 == "Crazy1") { printf("%s\n", "字符数组OK")

Java中用字符串常量赋值和使用new构造String对象的区别

String str1 = "ABC"; String str2 = new String("ABC"); String str1 = "ABC";可能创建一个或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池里创建一个创建一个String对象("ABC"),然后str1指向这个内存地址,无论以后用这种方式创建多少个值为"ABC"的字

C#之CLR内存字符串常量池(string)

C#之CLR内存字符串常量池(string) 投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-08-04我要评论 这篇文章主要介绍了C#之CLR内存字符串常量池(string),对于学习和理解C#内存原理很有帮助,需要的朋友可以参考下 C#中的string是比特殊的类,说引用类型,但不存在堆里面,而且String str=new String("HelloWorld")这样的重装也说没有的. 我们先来看一个方法: ? 1 2 3 4 5 6 7 8 cl

字符串常量到底存放在哪个存储区

转载自:http://blog.csdn.net/daiyutage/article/details/8605580 字符串常量,放在哪个存储区呢?是“自动存储区”还是“静态存储区”中? 比如: char *pstr="hello world!";这里,"hello world!"是一个字符串常量,pstr是在栈中的变量.我想问,字符串常量,在哪个内存区域分配空间呢? 好像应该不是在“栈区“分配空间吧!!! 一.预备知识—程序的内存分配一个由C/C++编译的程序占用

返回“字符串常量的指针”和“返回数组名”的区别

char*getmemory(void) { char p[]=”hello world”; return p; } void test(void) { char *str=NULL; str=getmemory(); printf(str); } 问:运行Test 函数会有什么样的结果? 由于数组p是栈上数据,返回数组名就是返回栈内存即动态数据区的地址,函数结束会被释放,所以返回的地址也就指向了不确定的位置了,str就成了乱码! 如果改成: char*getmemory(void) { cha