首页 > 其他分享 >sizeof结构体数组指针和sizeof数组指针的区别

sizeof结构体数组指针和sizeof数组指针的区别

时间:2023-11-06 23:56:27浏览次数:32  
标签:name pStu pName 数组 sizeof 100 指针

请思考一下

以下代码输出的 sizeof 分别是多少?

#include <stdio.h>

typedef struct {
  char name[100];
  unsigned char age;
} student_t, *student_ptr;

int main(int argc, char *argv[])
{
  student_t stu = {0};
  student_ptr pStu = &stu;
  char name[100] = {0};
  char *pName = name;
  
  printf("sizeof(stu.name): %ld\n", sizeof(stu.name));
  printf("sizeof(pStu->name): %ld\n", sizeof(pStu->name));
  printf("sizeof(pStu): %ld\n", sizeof(pStu));
  
  printf("sizeof(name): %ld\n", sizeof(name));
  printf("sizeof(pName): %ld\n", sizeof(pName));
  
  return 0;
}

结果如下:

sizeof(stu.name): 100
sizeof(pStu->name): 100
sizeof(pStu): 8
sizeof(name): 100
sizeof(pName): 8

问题

为什么同样是指针 sizeof(pStu->name)=100,而 sizeof(pName)=8 呢?
sizeof(pStu->name),首先 pStru 是指向结构体 stu 的指针,如果要计算 sizeof(pStru) 的值,在 64 位机器上,结果应该为 8,而代码中计算的是 sizeof(pStu->name),即计算的是成员 name 的 size,因此,sizeof(pStu->name) 的值为 100;而 pName 是指向 name 的指针,因此在 64 位机器上,sizeof(pName)=8
总结:sizeof(pStu->name) 求的是成员 name 的 size,而 sizeof(pName) 求的是数组指针的 size,两者完全不同,不可以混淆。

标签:name,pStu,pName,数组,sizeof,100,指针
From: https://www.cnblogs.com/jobyan/p/17814113.html

相关文章

  • 前缀和+差分数组
    一、一维数组度前缀和--固定数组查询区间和1.1定义对于给定一个数组arr(下标从0开始),它的前缀和S[i]表示从arr[0]到arr[i]元素总和。1.2构造前缀和S[i]=S[i-1]+arr[i-1]1.3应用-求某个区间的和计算区间[i,j]的元素和=>arr[i]+arr[i+1]+arr[i+2]+……+a......
  • C++二维数组输出3
    题目描述输入一个整数\(N\),输出一个N行N列的二维矩阵,矩阵中的元素按列用\(1\)~\(N\)\(∗\)\(N\)蛇形填充。输入格式一个整数\red{N}\(N\)(\(N<=10\))输出格式输出N行N列的矩阵,元素之间用一个空格隔开,行末不要有多余的空格。样例输入数据3输出数据123654789......
  • 数组
    数组伪代码integera[5]Setito0WHILE(i<5)Readina[5]Setitoi+1ReadnumSetpositionto0SetfoundtoFALSEWHILE(position<5ANDfoundisFALSE)IF(a[]equalsnum)Setf......
  • C语言结构体指针
    C语言结构体指针当一个指针变量指向结构体时,称它为结构体指针。C语言结构体指针的定义形式一般为:struct结构体名*变量名;下面是一个定义结构体指针的实例://结构体structstu{char*name;//姓名intnum;//学号intage;//年龄chargroup;//所在小组floatscor......
  • C++中如何返回数组类型数据
    错误示范:int*test01(){ intdata[3]={1,2,3}; returndata;}intmain(){ int*result=test01(); for(inti=0;i<3;i++){ cout<<result[i]<<'\t'; }}正确示范:int*test01(){// intdata[3]={1,2,3}; int*da......
  • 数据结构与算法-数组
    什么是数组在每一种编程语言中,基本都会有数组这种数据类型。不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据数组的特点低效的插入和删除数组为了保持内存数据的连续性,会导致插入......
  • L-4: 34--在排序数组中查找元素的第一个和最后一个位置
    给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1,-1]。你必须设计并实现时间复杂度为 O(logn) 的算法解决此问题。 示例1:输入:nums=[5,7,7,8,8,10],tar......
  • cf1322BPresent(基数排序+双指针+拆位)
    cf1322BPresent首先拆位是显然的,对于两个数a[i],a[j],除了考虑当前位上的数,我们还要考虑是否会产生进位,我们可以利用基数排序+双指针,因为我们每次都是将低位的排好序了,所以我们可以用双指针计算进位,然后分类计算一下,当前为为1的情况即可。#include<cstdio>#include<algorithm>#......
  • C++使用冒泡排序算法对数组进行排序
     #include<iostream>//包含iostream库usingnamespacestd;//使用标准命名空间intmain(){//主函数intarr[]={5,3,2,8,6,7,1,4};//定义并初始化数组intn=sizeof(arr)/sizeof(arr[0]);//计算数组长度//使用冒泡排序算法对数组进......
  • java数组最大值
    参考文章:java数组求最大值在Java中,你可以通过遍历数组元素来找到数组中的最大值。以下是两种常见的方法:使用循环遍历数组publicclassMain{publicstaticvoidmain(String[]args){int[]array={10,5,8,2,7};//假设数组的第一个元素是最大......