当前位置:首页 » 编程语言 » c语言指针与结构体用法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言指针与结构体用法

发布时间: 2023-01-02 08:34:50

1. c语言结构体指针

->的优先级高于++,

所以++pt–>x,是把x的值加1

2. c语言 结构体变量及结构体变量指针

1、printf("B=%d\n",B); 这种写法是将B强制转换成int类型,然后打印出来,即把B最开始的4个字节按照int类型来打印,B的最开始是mahj,内存里面放的即0x6D61686A,转换成10进制就是1785225581这个东东了。
至于*C和*(C+1),printf("*C=%c,*(C+1)=%c\n",*C,*(C+1));这种写法会把C当成int *类型,所以C+1就变成了第五个字符,打印出来的就是K了,没有矛盾的。

2、相同的结构体变量是可以这么赋值的,所以说’=‘确实完成了复杂的操作。这个可以看具体的编译出来的汇编指令就行了。

3. c语言结构体指针如何定义和使用

struct stu
{
char name[20];
long number;
float score[4];
} ;
再定义指向结构体类型变量的指针变量:
struct stu *p1, *p2 ;
定义指针变量p 1、p 2,分别指向结构体类型变量。引用形式为:指针变量→成员;

4. c语言中指针怎么使用

1、使用场景

使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:

#include<stdio.h>

#include <stdlib.h>

int main(int argc, char const *argv[])

{

int a[5]={0,1,2,3,4};

int *b,*d;

int c=2;

int *e=a; //e指向a数组首地址

//*b=2; 无法直接初始化

//printf("%d ", *b);

e=e+2; //移动两个地址单元

d=&c; //d指向c的地址来表示值

c=4; //修改原c变量的值,d指针的值会发生改变

b=(int *)malloc(sizeof(int));//为b分配一个int型空间来直接存储

*b=2;//分配空间后可以直接赋值了

printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);

2、类型说明

(1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元

(2)char *b:表示一个指向char变量的指针

*a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:

int nums[5]={0,1,2,3,4};

int *a=nums;

printf("%d %d %p ",*a,*(a+1),a);

(4)c语言指针与结构体用法扩展阅读:

指针的运算

指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算

(1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加。

int nums[5]={0,1,2,3,4};

int *a=nums;

(2)地址运算:通过a+i的方式.指针会指向a的下i个地址。

int nums[5]={0,1,2,3,4};

int *a=nums;

a=a+2;

printf("%d ",*a);

结果输出2。

参考资料来源 :指针-网络

5. C语言 结构体 指针的用法 程序解释

typedef struct
{
uint8 cmd_head;
uint8 cmd_type;
uint8 ctrl_msg;
uint16 screen_id;
uint16 control_id;
uint8 param[256];//可变长度参数,最多256个字节
}CTRL_MSG,*PCTRL_MSG;

相当于
struct __CTRL_MSG {
uint8 cmd_head;
uint8 cmd_type;
uint8 ctrl_msg;
uint16 screen_id;
uint16 control_id;
uint8 param[256];//可变长度参数,最多256个字节
};

typedef struct __CTRL_MSG CTRL_MSG;
typedef struct __CTRL_MSG *PCTRL_MSG;

6. c语言指针和结构体

楼主你好:
for(i=cnt;i>0;i--)
{/*P为临时结构体指针*/
p=(struct linklist *)malloc(sizeof(linklist));
scanf("%s%s%d",p->sno,p->sname,&p->sgrade);
p->next=ps->next;
ps->next=p;
}
你仔细看一下你的这段代码。
第一次循环的时候,p指向ps指向的地址,然后ps指向p,这样的结果是:ps--->p---->p->next
然后下一次循环,ps->next现在是p,你执行了“p->next=ps->next”那么p指向了p自己。。。而ps指向了p。在以后的循环中无法改变这一现象,从而造成了死循环,不知道你是不是能够明白,推荐你画一下图,画画就明白了。

还有最后的那个for循环,终止条件改为p=p->next,这个应该是粗心了吧?

看起来你是初学c,c中联表示比较难以理解的一部分,祝你好运,学业有成。

7. C语言的结构体及指针

int 是一种 数据类型
结构体 是一种 数据类型

int 是C语言预先定义好的 数据类型
结构体 是用现有的数据类型组合起来的 数据类型

我需要一个变量来存储整数, C语言已经有int这样的数据类型,我就直接声明一个int型变量:int a; 再把数据存进去 a = 1; 再以后的程序中就可以用a来代替1,如果我愿意,我也可以把其他的整数放在a里面:a =2;
我需要一个变量来存储(x, y)这样的坐标, C语言没有预先定义这样的数据类型,我就用现有的类型组合一个新类型出来:struct pos{int x; int y}, 再声明一个这样的变量:pos my_pos; 再把数据(1,2)存进去:my_pos.x = 1; my_pos.y = 2; 以后我可以用my_pos表示(1,2)这样的数据,我也可以让它表示其他的点my_pos.x = 4; my_pos.y = 5; 现在my_pos就可以表示(4,5)这个点的坐标了。

也就是说,结构体允许我们创建自己的数据类型,然后像使用系统中已经有的数据类型那样来使用结构体。两者的区别是:像int这样的类型,一般是直接声明,然后就可以用来存取整形数据了,而结构体需要先定义了,然后才能声明这种类型的变量,进而用来存取数据。

指针:指针也是一种数据类型
int类型变量存储整形数据
指针类型变量存储地址

访问int型变量的结果是得到一个整数,可以用来做加减乘除。
访问指针类型变量的结果是得到一个地址,通过这个地址,可以找到位于这个地址的实际数据。(好比通过一个服务器ip地址,可以找到对应服务器上的网页)

8. C语言结构体与指针

前面的typedef关键字和struct连用,代表把Inode定义为struct node。
也就是说Inode和struct node等价。
Inode *h就等于struct node *h,定义了一个指向struct node结构体的指针。

9. C语言指针和结构体

void fun(char *p,int n)//p:指向字符数组首地址的指针,n:一个整数
{
int i;
if((i=n/10)!=0) //取得最高位数的值
fun(p+1,i); //递归调用函数fun()
*p=n%10+'0'; //将整数值装换为字符,即(3转换为'3'),然后存入字符数组中
}

下面是详细的调用过程:str[]数组就是实参
调用fun(str[0],3567);
i=3567/10==356(!=0);
递归调用fun(str[1],356);
i=356/10==35(!=0);
递归调用fun(str[2],35);
i=35/10==3(!=0);
递归调用fun(str[3],3);
i=3/10==0;
*p==str[3]=3%10+'0';(3%10==3然后再加上'0'(看成字符'0'的ASCII码)就是字符'3'的ASCII码)
*p==str[2]=35%10+'0';(35%10==5然后再加上'0'(看成字符'0'的ASCII码)就是字符'5'的ASCII码)
*p=str[1]==356%10+'0';(356%10==6然后再加上'0'(看成字符'0'的ASCII码)就是字符'6'的ASCII码)
*p=str[0]==3567%10+'0';(3567%10==7然后再加上'0'(看成字符'0'的ASCII码)就是字符'7'的ASCII码)