C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size

#include <stdio.h>
#include <string.h>

int main()
{
    char a[10] = "\0";

    char *pa = (char *)&a;
    char (*paa)[10] = &a;

    printf("-----a[10]----\n");
    printf("a size:%d, pa size;%d, *pa size:%d, *paa size:%d\n", sizeof(a), sizeof(pa), sizeof(*pa), sizeof(*paa));

    return 0;
}
#./aaa
-----a[10]----
a size:10, pa size;8, *pa size:1, *paa size:10

当字符数组的首地址,强制转化成char *指针后: sizeof(*ptr) 不为array的大小;

原文地址:https://www.cnblogs.com/muahao/p/9032915.html

时间: 2024-10-01 02:51:43

C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size的相关文章

字符串指针变量与字符数组的区别

使用字符串指针变量与字符数组的区别 (1)分配内存 设有定义字符型指针变量与字符数组的语句如下: char *pc ,str[100]; 则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符.而系统只为指针变量pc分配4个存储单元,用于存放一个内存单元的地址.(2)初始化赋值含义 字符数组与字符指针变量的初始化赋值形式相同,但其含义不同.例如: char str[ ] ="I am a student ! " ,s[200]; char *pc="You

C语言字符数组与字符串

5.5.1 字符数组与字符串区别 l  C语言中没有字符串这种数据类型,可以通过char的数组来替代: l  字符串一定是一个char的数组,但char的数组未必是字符串: l  数字0(和字符'\0'等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组. 1 #include <stdio.h> 2 3 4 5 int main() 6 7 { 8 9 char c1[] = { 'c', '

数组与指针(四)——指针操作

// ptr_ops --指针 操作 #include<stdio.h>int main(void){   int urn[5] = {100,200,300,400,500}; int *ptr1,*ptr2,*ptr3; ptr1 = urn;       //把第个地址赋给指针    ptr2 = &urn[2];   //同上 printf("pointer value ,dereferenced pointer ,pointer address:/n");

char型字符串(数组)与string型字符串 指针与引用

一.常指针: int *const p;    //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p;    //指针可以改变,但是指针指向的数据不可以改变. 指向常量的常指针: const int *const p;    //指针不可改变,且指针指向的数据也不可改变. 引用就是别名,定义引用的同时必须要对引用进行初始化. 二.利用引用返回多个值: 引用就是别名,引用必须要初始化. #include "stdafx.h" #include <

C++基础之字符数组和字符串

无意中发现了一个非常有意思的技术类型小品文系列,通过大牛指导菜鸟的方式,解说讲C++知识,有的非常基础却是开发中easy忽略的地方. [Elminster的专栏] http://blog.csdn.net/Elminster/article/contents [Solmyr 的小品文系列之中的一个:字符串放在哪里? ] http://blog.csdn.net/elminster/article/details/9730 转帖至此,给出链接,原文就不贴了,总结并扩展一下方便以后回想. 字符数组(

C Language Study - 字符数组及字符串定义方法

定义一个字符数组: char cArray[] = {'I','a','m','a','m','a','n','\0'}; 用'\0'表示字符数组结束标志.它不占字符长度大小,但是占内存大小. Result : sizeof(cArray) = 8 ; strlen(cArray) = 7 . 字符串定义方法: (1) char cString[] = "I am a Man !"; 定义了一个字符串数组,与定义一个字符数组实质一样. (2) char *pString = "

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

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

倒置字符数组中的字符

问题:如何把字符串 "We are the world" 转成 "world the are we" ?如果最多只能用两个额外的变量又该如何实现这样的转换? 分析:1.把字符串转成字符数组,然后对字符数组进行操作. 2.选择倒置字符数组的方法:用一个临时变量temp来交换两个字符,然后依次移动数组中的其他元素:利用 A=A+B, B=A-B, A=A-B 方式来交换两个字符. 3.根据数组中首尾字符的位置来倒置它们之间的字符. 4.优化方法:减少循环的次数,减少变量

【C#】字符串与字符数组

字符串与字符数组的相互转换. 字符串转换成字符数组: string ss="abcdefg"; char[] cc=ss.ToCharArray(); 字符数组转换成字符串: //char [] cc 定义同前段代码 string s=new string(cc);