结构体全局变量成员赋值

struct s
{
    int a;
};

s g;

g.a = 1;  // 编译错误

void f()
{
    g.a = 1; // 编译正确
}

为什么全局结构体变量成员只能在函数内调用?

因为g.a=1是赋值语句,不是初始化语句,赋值语句只能运行的时候可以执行。

时间: 2024-08-10 02:09:14

结构体全局变量成员赋值的相关文章

C语言中结构体变量之间赋值

最近,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是很熟悉.对于两个相同类型的结构体变量,他均采用的是逐个成员变量直接赋值的形式.如下的代码示例: 如上代码所示,tEmployeeInfoSrc和tEmployeeInfoDest是两个类型相同的结构体变量,tEmployeeInfoSrc(源结构体变量)中的各个成员变量已赋初值.现要使tEmployeeInfoDest(目的结构体变量)中的各个成员变量的值与tEmployeeInfoSrc中对应成员变量的值相同.小刘采用的

结构体中指针赋值问题的分析及C代码示例

问题描述 某结构体的定义如下: typedef struct { int iAge; // 年龄 char szAddr1[100]; // 地址1 char *pszAddr2; // 地址2 char **pszAddr3; // 地址3 } T_PeopleInfo; 请问如何对结构体中的各个成员变量(尤其是指针变量)进行赋值? 问题分析及C代码示例 我们可以看到,在结构体T_PeopleInfo中,pszAddr2和pszAddr3均为指针,其中pszAddr2为一级指针,pszAddr

OpenCV 中结构体IplImage 成员width widthStep使用注意事项

OpenCV 中结构体IplImage 成员width,widthStep使用注意事项 width 是指的图片宽度是多少个像素,而这里widthStep是指的图片中的每一行占用多少个字节. 而且,widthStep会有字节对齐. 当需要对每个像素进行操作的时候,这里最好用widthStep做行递增变换. 比方说这里就是一个例子,明显,ptr_pixel_tmp是指向double类型的三通道图像,而ptr_pixel_img是unsigned char类型的三通道图像,double占八个字节. 于

通过结构体某个成员的地址计算结构体首地址

给出一个结构体成员的地址计算该结构体的起始地址,据说内核代码中有这样用的,但还没有看到.不过觉得这个题的解决方法还是有一定技巧的,就总结一下.下面是实现的代码. /* Author: Godbach Date: Oct 23, 2008 */ #include <stdio.h> #define STRUCT_OFFSET(stru_name, element) (unsigned long)&((struct stru_name*)0)->element struct stru

通过结构体某个成员的地址计算结构体首地址 (转)

最近在CU论坛上有很多人在问这样一个问题:给出一个结构体成员的地址计算该结构体的起始地址.其实这个题我之前也没有接触过,据说内核代码中有这样用的,但还没有看到.不过觉得这个题的解决方法还是有一定技巧的,就总结一下.下面是实现的代码. 1 /* 2 Author: Godbach 3 Date: Oct 23, 2008 4 */ 5 #include <stdio.h> 6 #define STRUCT_OFFSET(stru_name, element) (unsigned long)&am

结构体访问成员变量什么时候该用“-&gt;”或者是&quot;.&quot;呢?的困惑

煎蛋栗子: typedef struct Node{int data;struct Node *next;}LinkList; LinkList *p=(LinkList *)malloc(sizeof(LinkList)); 在这里,变量p是[LinkList *]类型的[指针变量]它的值是指向某一个[结点]的[地址] 而[(*p)]表示的则是[结点变量],它的值指向的是一个[结点]p是指针,(*p)是结点变量.我们要访问结构体内的成员data 通过指针变量访问:[p]->data通过结点变量

计算结构体中成员变量的偏移

被人问到这个问题,各种解决. google一下,MFC中有一个OFFSET宏,就有这个功能. 写一下: #define offsetof(structure, member) ((int)(&((structure *)0)->member)) eg: #include <iostream> using namespace std; #include <stdio.h> #define offsetof(structure, member) ((int)(&(

结构体复制与赋值

1 #include <stdio.h> 2 #include <string.h> 3 #include <malloc.h> 4 5 int main(int argc, char* argv[]) 6 { 7 struct data 8 { 9 int i; 10 char c; 11 int j; 12 int arr[2]; 13 }; 14 15 16 struct datawptr 17 { 18 int i; 19 char *c; 20 }; 21 2

指针直接赋值为整型AND利用宏定义求结构体成员偏移量

首先我们要更正一个很熟悉的概念,那就是指针不仅仅是“地址”,指针还有一个很重要的特性,那就是“类型”. 指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是 int *p = 0; 除外,该语句表示指针为空): 所以 int *p = 10; 这样的代码是不允许的.在C++里面直接是error的,即使在一些C编译器中以warning的形式提示,但是warning有的时候也很严重.所以这种东西不要用.从const int到int*是不存在隐士转换的.