c语言如何给指针赋值(c语言结构体函数指针怎么赋值)
本文目录
- c语言结构体函数指针怎么赋值
- c语言如何给结构体指针赋值
- C语言如何把指针指向的值赋值到变量上
- C语言程序设计指针变量赋值
- 在C语言中能否直接给指针指向的数据赋值为什么
- c语言 指针如何赋值
- 关于C语言中指针赋值的问题
- C语言 如何给字符指针数组赋值
- C语言指针赋值
c语言结构体函数指针怎么赋值
指针就是指向内存的某个地址的一个变量。
结构体指针就是这个指针变量的值必须指向存放该结构体的内存位置。
当这个指针没有任何指向时,可以赋值为null值,但是改指针不可使用,程序中应该做判断。下面是一些赋值演示。
struct student{
int id;
int score;
} aaa;
struct student *p = null;//结构体指针p初始化赋值为null
struct student *p2=&aaa//p2指向aaa
struct student *p3=(struct student *)malloc(sizeof(struct student));//内存中申请一个结构体空间,并将地址强制转换为结构体指针变量赋值给p3
c语言如何给结构体指针赋值
结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。
举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int),依次调用函数
#include 《stdio.h》
#include 《stdlib.h》
struct student //建立结构体,学号,姓名,3门课的分数
{
int num;
char name;
int score;
}Stu; //初始化,一共5个学生的数据
void getScore(struct student * p) //函数:向结构体读取分数,一共三门课
{
int i, j;
for (i = 0; i 《 5; i++)
for (j = 0; j 《 3; j++)
scanf_s("%d", (&(p+i)-》score));
}
void getNum(struct student * p) //函数:向结构体读取学号
{
int i;
for (i = 0; i 《 5;i++)
scanf_s("%d", &(p + i)-》num);
}
void getName(struct student * p) //函数:向结构体读取姓名
{
int i;
for (i = 0; i 《 5; i++)
scanf("%s", &(p + i)-》name);
}
int main()
{
int i, j, average = { 0 }; //average数组储存每门课的平均分
getNum(Stu); //函数调用
getName(Stu);
getScore(Stu);
for (j = 0; j 《 3; j++)
{
for (i = 0; i 《 5; i++)
average;
}
for (i = 0; i 《 5; i++)
{
printf("num = %d name = %s Score:", Stu.name); //依次打印学号 姓名
//printf("%d %d %d", Stu);
for (j = 0; j 《 3; j++) //打印三门课的分数
printf(" %d", Stu);
printf("\n");
}
printf("average:");
for (i = 0; i 《 3; i++)
printf("%f ", (float)average/5); //打印三门课平均分
printf("\n");
system("pause");
return 0;
}
如:
scanf("%c%c%c",&a,&b,&c);
输入为:
d e f
则把’d’赋予a, ’ ’(空格)赋予b,’e’赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把’ ’作为下一个字符送给b。
只有当输入为:def(字符间无空格) 时,才能把’d’赋于a,’e’赋予b,’f’赋予c。
C语言如何把指针指向的值赋值到变量上
要将指针指向的值赋值到变量上,
需要将指针指向的值取出,然后执行赋值操作。
对指针取值需要使用取值运算符*,这个符号和乘相同,但功能不同。用于取值时,*为单目运算,与后续的指针相结合,实现取指针指向的值的效果。
比如
int
a
=
10;
int
b;
int
*p
=
&a
这时p指向变量a的地址,指向的值为10,要将其赋值给b,需要
b
=
*p;
C语言程序设计指针变量赋值
C语言 形式逻辑不成立(C语言的缺点!)。\x0d\x0a\x0d\x0aint a ,*p=a; 是声明,声明中 *p=a 表示p是指针,初始化把a数组的首地址赋给它。\x0d\x0a\x0d\x0a*p=a;是语句,不是声明,形式一样,就不行了!\x0d\x0a因为 语句 里,*p 表示p 指向的 值。\x0d\x0a\x0d\x0a同样的形式,意思不同,形式逻辑不成立,(C语言的缺点!)。\x0d\x0a初学者,人人遇到这个问题!
在C语言中能否直接给指针指向的数据赋值为什么
可以,但int *p;*p=7;这样不行。
因为“能直接给指针指向的数据”赋值,而这里的p还没有指向,所以不能赋值,这种指针有个名字叫“悬浮指针”,是不能给它赋值的。
这样才可以:
int a,*p=&a;*p=7;
实际上就是使a等于了7。
扩展资料:
注意事项
也可以使用赋值运算符为指针变量赋值,但要保证两个指针变量的类型相同。
假设有如下变量定义:
int i,j,*p,*q;p=&i;q=&j;
这两句将变量i和j的地址分别赋值给指针变量p和q;
执行了q=p后,执行该条语句,指针变量p和q都指向了同一个变量i,因此指针变量p和q中存放的都是变量i的地址&i。变量i此时并没有初始化,只为其分配了内存单元。
注意理解:q=p;和*q=*p
前者为指针变量q赋值,即将指针变量p中存放的某个变量的地址赋值给q。显然,赋值后,q和p就指向了同一个变量。
后者将p指向变量的赋值给q指向的变量。
例子:
p=&i;
q=&j;
i=2;
j=3;
c语言 指针如何赋值
1、变量的指针就是变量的地址。存放变量地址的变量是指针变量。即在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个变量的地址或称为某变量的指针。
2、为了表示指针变量和它所指向的变量之间的关系,在程序中用“*”符号表示“指向”。
3、定义指针变量.对指针变量的定义包括三个内容:指针类型说明,即定义变量为一个指针变量和指针变量名的基本形式类型说明符*变量名。
4、int i,j;表示i,j是一个指针变量,它的值是某个整型变量的地址。或者说i,j指向一个整型变量。至于i、j究竟指向哪一个整型变量,应由向i,j赋予的地址来决定。
5、int *s是指向整型变量的指针变量,float *d是指向浮点变量的指针变量,char *g;是指向字符变量的指针变量。应该注意的是,一个指针变量只能指向同类型的变量,如s只能指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量。
6、指针变量的引用,指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。
关于C语言中指针赋值的问题
你这样想说明你还没有真正理解内存和指针。int
a;表示编译器随机取出一个空闲的地址分配给a,不妨设为00000000,长度为sizeof(int),不同编译器可能不同。int
*p;也表示随机取出一个空闲的地址分配给p,不妨设为000000f0,长度一般为4个字节,则这四个字节现在存储的内容是不确定的,假设为00000ff0,那么*p表示地址00000ff0上的值。*p=a则把地址00000ff0的值变为a的值,显然如果该地址目前正在被某个进程使用,就有可能破坏该进程,因此这种方法是十分危险的。给指针赋值一般有两种方法,一种是将已经存在的变量的地址传递给指针,格式为:p=&a;另一种是首先为指针申请指向的合法内存,C语言中用函数malloc(),然后给已申请的地址赋值,如*p=6。
C语言 如何给字符指针数组赋值
字符指针数组的赋值和普通数组的赋值是一样的,只不过字符指针数组里的元素是指针。
以下是字符指针数组赋值的示例:
char* pChar;
char str1 = "First";
char str2 = "Second";
char str3 = "Third";
char str4 = "Fourth";
char str5 = "Fifth";
pChar = str1;
pChar = str2;
pChar = str3;
pChar = str4;
pChar = str5;
for (int i=0;i《5;i++)
{
printf("pChar);
}
C语言指针赋值
类型不匹配,这个时候a相当于指针的指针,这样写当然不正确了,你要是想取这个地址,可以写成
p = *(a+1);
更多文章:
h5免费制作软件哪个好(h5用什么软件制作会比较省时省力呢)
2026年4月11日 11:40
jquery设置select选中(jquery怎么设置select选中某项值)
2026年4月11日 11:20
docker菜鸟教程常用指令(如何在容器中运行docker命令)
2026年4月11日 11:00
linux应用开发和软件开发(虚拟机只能装linux系统,如何进行软件开发)
2026年4月11日 10:20
创建联合索引的sql语句(sql server有联合主键是否也有联合索引,怎样创建联合索引)
2026年4月11日 09:20





