指针-字符串数组相关问题,正文有描述

问题描述

字符串数组相关问题,正文有描述
1.char *str[] = { "Welcome", "to", "Fortemedia", "Nanjing" };
2.char **p = str + 1;
3.str[0] = (*p++)+2;
4.cout << str[0] << endl;
5.str[0] += 1 ;
6.cout << str[0] << endl;
7.str[0] += 1;
8.cout << str[0] << endl;

在VS2013中运行结果如下:

(空)
(空)
Fortemedia
请按任意键继续. . .

第三行str[0]指向o后面的'',输出为空,但是将指针加1后输出为什么还是空?再次加1才指向下一个字符串首地址。

解决方案

你认为这些字符串在内存中的存放格式如下:"WelcometoFortemediaNanjing"

这个想法并不正确,这些字符串仅仅是被存放在了一块叫做“常量区”的地方,但C++没有要求它们首尾相连。所以,to后面并不一定紧跟Fortemedia,这和编译器有关。

彩蛋:

char *str[] = {"Welcome", "to", "Welcome", "Nanjing"};

把str的定义改成这样,输出的时候也许会有惊喜……(编译器会把两个Welcome放到同一个地址)

解决方案二:

void Test()
{
char *str[] = { "Welcome", "to", "Fortemedia", "Nanjing" };

cout << str[0] << endl;

cout << str[1] << endl;

cout << str[2] << endl;

cout << str[3] << endl;
}

时间: 2024-09-21 07:50:44

指针-字符串数组相关问题,正文有描述的相关文章

关于字符串数组 做指针输入的问题

问题描述 关于字符串数组 做指针输入的问题 #include void gb(char **buf) { *buf[0] = 'a'; //这里down掉 } int main() { char b[] = { "aaaasssddddasd" }; printf("%sn", b); gb(&b); system("pause"); return 0; } b是常量指针,不能当做左值这个我知道,这个程序里的被调函数也没有修改b的值. 为

一个关于指针和数组的问题

问题描述 一个关于指针和数组的问题 #define _CRT_SECURE_NO_WARNINGS#include ""stdlib.h""#include ""stdio.h""#include ""string.h"" int main(){ char buf1[100] = { 0 }; char buf2[100] = { 0 }; char *p1 = buf1; char *

C语言之指针、数组和函数

基本解释 1.指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址):数组的本质则是一系列的变量. 2.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变.指针可以随时指向任意类型的内存块,它的特征是"可变",所以我们常用指针来操作动态内存. 3.当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针. 问题:指针与数组 听说char a[]与char *a是一致的,是不是这样呢? 答案与分析: 指针和数组存在着一些本质的区别

c++-jna传递指针转换为数组问题

问题描述 jna传递指针转换为数组问题 最近在做jna相关问题,遇到一个问题:JNA调用c++接口,传递的是指针,在c++接口中给这个指针分配了一个数组空间,在java这边怎样将这个指针转换为数组?希望大神能解答 解决方案 解决了,又写了一个接口用于指针的自增,然后返回这个指针给java那边.但是需要遍历数组,消耗了一些性能

c语言-C语言字符串数组定义问题

问题描述 C语言字符串数组定义问题 #include int main() { char *ptr[10]; 为什么这样运行时会出错? gets(ptr[0]); } #include int main() { char ptr[10][20]; 而这样运行时则没有问题? gets(ptr[0]); } char *p[10] 与 char p[10][20] 之间有什么不同? 还是说在这里是gets()函数用错了? 万分感谢! 解决方案 哥们,你的第一个定义的是数组指针,第二定义的是一个二维数

c语言-C语言中的指针和数组的初始化

问题描述 C语言中的指针和数组的初始化 char a[]=""abcdef"";char *p =""cdefg"";a[1]='A';p[1]='A'; 这段代码有什么问题?#include int main(){ char amessage[]=""now is the time""; char *pmessage = ""now is the time"

指针与数组的区别详解

 指针是C语言的精华,它是一柄"双刃剑",用的好与坏就看使用者的功力了.下面就一道测试题,看一下指针与数组的区别.   char *p1, *p2;char ch[12];char **pp; p1 = ch; pp = &ch; p2 = *pp; 问p1和p2是否相同       题目如上,找出其中的不妥之处.       首先,数组ch是没有初始化的.其次,一个比较隐含的地方是,数组名可以代表数组第一个元素的首地址,这个没有问题,但是,数组名并非一个变量,数组分配 完成后

不知道元素个数的情况下,怎么初始化字符串数组

问题描述 不知道元素个数的情况下,怎么初始化字符串数组 string[] t = new string[] {""""""}; 不知道有多少个元素 解决方案 不知道个数就不初始化数组了,改用list或者知道了明确个数了再初始化数组 解决方案二: 一个是使用ArrayList.List,它们可以随时增加元素,一个是估算一个可能用到的最大值,比如你的数组只用到10个,就string s = new string[10]; 解决方案三: 不知道个数的情

c语言-结构体内指针字符数组的释放

问题描述 结构体内指针字符数组的释放 问题:结构体成员char* name和结构体struct student* studentIOS同时释放的话回报错,错误见代码中注释.请问这里要怎么释放呢?还是结构体里面不能这样使用指针字符数组? #include #include struct student{ int id; //长度:4 char* name; //8 int score[2]; //8 float avgScore; //4 }; void input(struct student*