首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CCPP结构中的字符数组和字符指针

结构中的字符数组和字符指针 一般情况下我们在结构中都使用字符数组来存储字符串,是否可以使用指向char的指针来代替字符数组呢?...pnames treas = {"hig","klm"};//字符串全部存储在编译器存储常量的地方(特别注意,是利用指针定义的数组,不是之前定义好的) #define LEN 20 struct pnames...{ char *first; char *last; } struct pnames treas = {"hig","klm"}; names结构体中的字符串存放在结构体内部,结构体需要分配40个字节存储姓名...struct pnames结构体不需要为字符串分配任何存储空间,它使用的是存储在别的地方的字符串,指针只提供操作的可能。...有关结构体中字符数组的其他的用法: 可以使用malloc分配内存并使用指针储存该地址。(详见C Primer Plus P459)

1.5K20

《挑战30天C++入门极限》CC++中字符指针数组及指向指针的指针的含义

C/C++中字符指针数组及指向指针的指针的含义   就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针。   ...char* *b=a;//定义一个指向指针的指针,并赋予指针数组首地址所指向的第一个字符串的地址也就是abc\0字符串的首地址 cout<<*b<<"|"<<*(b+1)<<...endl; } }   下面我们来仔细说明一下字符指针数组和指向指针的指针,段1中的程序是下面的样子: char *a[]={"abc","cde","fgh"}; char*...答案是这样的,在c++中,输出字符指针就是输出字符串,程序会自动在遇到\0后停止.   ...我们最后分析一下段2中的代码,段2中我们调用了print_array()这个函数,这个函数中形式参数是char *array[]和代码中的char *test[]一样,同为字符指针,当你把参数传递过来的时候

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++字符数组存放字符串 | 字符指针变量

    C++指向数组的指针作函数参数  一维数组名可以作为函数参数传递,多维数组名也 可作函数参数传递。 ...C++用字符数组存放一个字符串 在C++中可以用多种方法访问一个字符串,第一种字符数组: #include//预处理 using namespace std;//命名空间  int ...第二种,字符串变量,编译运行结果: #include//预处理 #include using namespace std;//命名空间  int main()//主函数...第三种,字符指针变量,编译运行结果: #include//预处理 #include using namespace std;//命名空间  int main()//主函数...对字符串中字符的存取,可以用下标方法,也可以用指针方法。 C++字符数组存放字符串 | 字符指针变量 更多案例可以go公众号:C语言入门到精通

    1.3K2218

    【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

    文章目录 一、字符串 一级指针 内存模型 1、指定大小字符数组 2、未指定大小字符数组 3、指向常量字符串的指针 4、指向堆内存的指针 一、字符串 一级指针 内存模型 ---- #include 字符串 ; 在 全局区 的 常量区 中 , 存放 “123” 常量字符串 ; 在 栈区 的 array2 数组中 , 存放 “123” 字符串内容 , 注意最后的 \0 字符 , 该数组大小 4...字节 ; // 栈内存数组 不指定大小 char array2[] = "123"; 3、指向常量字符串的指针 在 栈内存 中 , 定义 局部变量 指针 p , 没有为该指针分配内存..., 该指针指向 字符串常量 “def” ; 在 全局区 的 常量区 中 , 定义 字符串常量 “def” ; // 定义指针 , 使用字符串赋值 char *p = "def"; 4...、指向堆内存的指针 先在 堆内存 中 , 分配 5 字节内存 ; 然后 在 全局区 的常量区 中 , 定义 字符串常量 “456” ; 最后 将 字符串常量 “456” 拷贝到 堆内存 分配的 内存中

    2.4K20

    指针+数组指针+字符指针+指针数组

    p中,此时指针变量p就是指向变量i,注意p中的是i的地址;然后我通过对指针解引用,就是在指针前面加一个*,来通过地址访问i的内存,也就是i的值;很明显打印的值就是i的值;同理,浮点型,字符型的变量都是可进行如上操作的...数组指针打印数组元素 数组指针,是一个指针,但是他指向一个一维数组,如图(*p)必须括起来,我们可以把他看成是数组名,关键点是因为指向的是整个一维数组,所以应该取整个数组的地址,应该加上&,然后我们把(...字符指针 含义 字符指针就是指针指向了字符或者字符串,因为字符串可以看成是一个字符数组,所以字符串指针与数组指针大致可以类比; 字符指针打印字符串 这里我使用了三种打印字符串的方式,从结果上看,很明显打出来的字符串都是相同的...,其实我们平时打印字符串都是找到字符串的首地址,然后以%s的格式从地址向后打印;而指针正好指向的字符串,指针变量里面储存的就是字符串的首元素地址(这个跟数组是一样的);然后我们就可以完成打印啦。...2.二维数组的数组名代表的是一行的一维数组的整个地址,当我们用数组指针指向二维数组时,就直接取二维数组的数组名就好啦。

    7410

    C++指向数组元素的指针

    C++指向数组元素的指针 在C++中,一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址;指针变量既然可以指向变量,也可以指向数组元素,所谓数组元素的指针就是数组元素的地址...p=&array[0]; 和C语言一样,在C++中,数组名代表数组中第一个元素的地址,因此也可以这样写: p=&array[0]; p=array; 在定义指针变量时可以直接赋初值,p的初值为array...如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p+i和array+i就是array[i]的地址,或者说,它们指向array数组的第i个元素。...其中array是数组名,p是指向数组元素的指针变量。 经典案例:C++输出数组中的10个元素。...C++指向数组元素的指针 用指针输出数组中的10个数 更多案例可以go公众号:C语言入门到精通

    2.1K2319

    【进阶指针一】字符数组&数组指针&指针数组

    ); printf("对指针解引用得到的是指针指向的那个目标:>%c\n", *p2); printf("%s\n", p2); return 0; } 2-2 误区: 误以为代码2中p2指针变量是存放着字符串...,实际上p2所指向的是字符串"abcdef”中首个字符'a'的地址(原因有两点:1.指针变量在x86位(32位机器下)是4个字节,但是"abcdef“有7个字符,一个指针只能存放一个地址;2.通过指针解引用打印出...异 (1)字符'a'的存储位置:代码1中的'a'存放在栈区,代码2中的'a'存放在字符常量区(通过下方截图可以证明) 2-4 关于字符常量区: 对于上图的解释3: - 既然位于字符常量区的...【指针数组模拟打印二维数组】  这和arr[3][5]的区别在于arr[3][5]在内存中中每一个元素的地址都是连续的,而指针数组模拟的二维数组这种方式的地址不是连续的。...数组指针 int main() { //整型指针-指向整型的指针-存放整型变量的地址 int a = 10; int* pa = &a; //整型指针-指向字符的指针-存放字符变量的地址 char

    96640

    C++指向结构体变量的指针

    C++通过指向结构体变量的指针引用结构体变量中的成员 C++中,一个结构体变量的指针就是该变量所占据的内存段的起始地址,指针变量也可以用来指向结构体数组中的元素。 ...C++提供了指向结构体变量的运算符->,例如: p->num;//表示指针p当前指向的结构体变量中的成员num p->num 和(*  p).num 等价,同样,p->namep->name等价于(*p...p->n;//得到p指向的结构体变量中的成员n值。 p->n++;//得到p指向的结构体变量中的成员n的值,用完该值后使它加1。...++p->n;//得到p指向的结构体变量中的成员n的值,并使之加1,然后再使用它。 经典案例:C++指向结构体变量的指针。...C++指向结构体变量的指针 更多案例可以go公众号:C语言入门到精通

    2.9K118

    指针进阶(1)(字符指针,指针数组,数组指针,函数指针)

    TIP: 因为此时的字符串是一个常量字符串,所以修饰指针p最好要有const,并且在*左边。 指针数组 指针数组的主语是数组,顾名思义就是存放指针的数组。...int *arr[5];//存放整型地址的指针数组 char *arr[6];//存放字符类型的指针数组 数组指针 概念辨析 我们类比一下: 整型指针:指向整型变量的指针,存放整型变量的地址的指针。...数组指针:指向数组的指针,存放数组地址的指针。...形式辨析 int * p; 首先*表示这是一个指针,命名为p,然后指向的是int类型的指针,数组指针也一样 int(*p) [5]; 上面的形式就是数组指针,我们需要先用()把*和指针名括起来,然后剩下的就是指针指向的类型...数组接受时,行可以省略,但是列不能 指针接收,必须用数组指针来接收。 函数指针 函数指针就是指向函数的指针。

    11110

    指向字符串的指针赋值就出错?

    现有一个指向字符串的指针, char *test ="123123123"; 如果执行下面这句话就会出错 *test=“321321”; 这是因为 test 这个指针指向的是123123123这个储存于常量区的字符串...通常说的内存四区指的就是上图中的堆区、栈区、全局区和代码区这四个部分,全局区又可以分为全局变量区和常量区。 栈区包括局部变量、函数的入参,返回值等。堆区是由程序员自行分配的内存。...全局区用于存放全局变量、静态变量和常量,里面还有一个常量区,字符串常量和其他常量存放在此。该区域是在程序结束后由操作系统释放。const定义的全局变量存放在常量区(这个注意一下)。...代码区存函数体的二进制代码。 为什么要划分这几个区呢,这是因为把不同的数据放到不同的区里,就赋予了这些变量或常量不同的生命周期和不同的释放方式,这样我们在编程中就可以根据需求灵活运用。...通过以上可以看出,上图中红色框内的是不可以更改的,开头那个字符串是存储在常量区的,是不可以更改的。所以开头的那个程序运行就会出错。

    52930

    什么是 字符指针? 数组指针? 函数指针? 函数指针数组?

    正文开始 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* ; 一般使用: int main() { char ch = 'w'; char *pc = &ch; *pc....”; 特别容易让我们以为是把字符串 hello world. 放到字符指针 pstr ⾥了,但是本质是把字符串 hello world. 首字符的地址放到了ps!!tr中。...C/C++会把常量字符串存储到单独的⼀个内存区域, 当⼏个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。但是⽤相同的常量字符串去初始 化不同的数组的时候就会开辟出不同的内存块。...• 浮点型指针变量: float * pf; 存放浮点型变量的地址,能够指向浮点型数据的指针。 那数组指针变量应该是:存放的应该是数组的地址,能够指向数组的指针变量。...*) 今日题目 实现一个函数,可以左旋字符串中的k个字符。

    7610

    c中给字符数组,字符串指针赋值的方法总结

    2、char a[10]; a=”hello”; 这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello常量,这里的指针a出现混乱...在C语言中把字符串当作数组来处理,因此,对字符串的限制方式和对数组的一样,特别是,它们都不能用C语言的运算符进行复制和比较操作。 直接尝试对字符串进行复制或比较操作会失败。...例如,假定str1和str2有如下声明: char str1[10], str2[10]; 利用=运算符来把字符串复制到字符数组中是不可能的: str1 = “abc”; str2 = str1...但是,使用=初始化字符数组是合法的: char str1[10] = “abc”; 这是因为在声明中,=不是赋值运算符。...试图使用关系运算符或判等运算符来比较字符串是合法的,但不会产生预期的结果: if (str1==str2) … 这条语句把str1和str2作为指针来进行比较,而不是比较两个数组的内容。

    6.4K30

    搞清C++中指针、数组、字符串的关系

    字符串是存储在内存中连续字节的一系列字符,C++处理字符串的方式有两种: 1、来自C语言的C-风格字符串; 2、基于string类库中的方法。 本文主要讲第一种。...但怎么表示这个字符串呢,有两种C-风格字符串的表示方式: 1、使用带双引号的字符串表示,比如"aaa"; 2、使用指向字符串第一个字符的指针表示,比如arr(arr是数组名,也是指向数组第一个元素的指针...,也是指向arr这整个数组的指针,其值实际为"aaa"字符串所在的内存地址)。..."aaa",是一个常量,所以直接输出"aaa") 0x7ffeefbff5d8(arr其实还是指向arr整个数组地址的指针,也是指向arr中第1个元素地址的指针,所以&arr输出了其指向的地址值) a(...所以,可以把字符串赋值给指向字符的指针p,而不能把字符串赋值给一个字符数组名(因为字符数组名虽然也是一个指针,但它是一个(指针)常量,是不可变的,放在等号左边会报错)。

    1.6K22

    c++常量指针和指针常量_指针指向二维数组

    ,该变量就当做常量看待,不可再更改 Const int a=250;//将变量a常量化 A=200;//gcc编译器报错 (2)常量指针:不能通过指针变量来修改指向的内存区域的数据,主要目的是保护数据不可篡改...*pa=200;//gcc编译报错 Printf(“a=%d\n”,*pa);//可以查看 int b=300; pa=&b;//pa重新指向b变量,可以修改指针变量本身保存的地址 *pa=400...;//gcc编译报错 (3)指针常量(不太用) 指针永远指向一块内存区域,不能再指向别的内存,但是可以修改指针内存的值 例如: int a=100; int * const pa=&a;//定义指针常量...*pa=300;//可以 printf("a=%d\n",*pa); int b=200; *pa=&b;//不可以,gcc报错 printf("a=%d\n",*pa); (4)常量指针常量:指针本身和指向的内容都不可修改...4个字节,十六进制每两个数字是一个字节,左是高字节,右是低字节 ** 如何做到操作访问4字节中的 某1个字节或者某2个字节数据呢?

    73620

    C++指向结构体变量的指针构成链表

    C++结构体变量和指向结构体变量的指针构成链表  链表有一个头指针变量,以head表示,它存放一个地址,该地址指向一个元素。...链表中的每一个元素称为结点,每个结点都应包括两个部分:   用户需要用的实际数据 下一个结点的地址。 经典案例:C++使用结构体变量。...19;//赋值       stu3.num=1003;//赋值    stu3.sex='M';//赋值    stu3.age=20;//赋值       head=&stu1;//将结点stu1的起始地址赋给头指针...    stu3.next=NULL;//结点的next成员不存放其他结点地址    point=head;//point指针指向stu1结点       do   {     coutC++指向结构体变量的指针构成链表 更多案例可以go公众号:C语言入门到精通

    1.3K88

    c语言之字符指针变量和字符数组的异同

    1.字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址),而不是将字符串放到字符指针变量中。 2.赋值方式。...对字符数组只能对各个元素进行赋值,不能用以下办法对字符数组进行赋值。...,而是字符串中第一个元素的地址。...而定义一个字符指针变量时,给指针变量分配内存单元,在其中也可以放一个字符变量的地址,也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未指向一个确定的字符数据。...0; } 5.需要注意的是,若定义了一个字符指针变量,并使其指向了一个字符串,也可以用下标的形式引用指针变量所指的字符串中的字符,例如: #include #include<iostream

    1.5K10
    领券