我要做的是将值存储在元素strucz数组中(该数组有一个成员void*data)
typedef struct {
void* data
} Element;
我已经把数组拼成了3个元素
Element* array = malloc(3 * sizeof(Element));
我知道如果数据是int,你可以这样做,但是如果数据是空的,你怎么做呢*
array[0].data = 65;
我试过打字
((*int)(array[0].data)) = 65;
但我得到消息预期表达式之前'in'
我的第二个问题是如何在元素结构中存储字符串(我不能使另一个成员成为字符串,它必须使用void指针)
我可以用strcopy或sscanf吗?
下面的主要样本,以防我做错了什么
#include "test.h"
int main (void)
{
Element* array = malloc(3 * sizeof(Element));
((*int)(array[0].data)) = 65;
((*int)(array[1].data)) = 64;
((*int)(array[2].data)) = 66;
}
编辑
抱歉,我应该添加数据将使用循环添加(迭代基于用户输入,因此arrayOfElements可能有5,8,20个ect元素),基于用户3386109答案
Element* arrayOfElements = malloc(3 * sizeof(Element));
arrayOfElements[0].data = malloc( sizeof(int) );
int *ptr = arrayOfElements[0].data;
*ptr = 65;
完美地工作,但如果我想做阵列的话[1]。数据=67
Element* arrayOfElements = malloc(3 * sizeof(Element));
arrayOfElements[1].data = malloc( sizeof(int) );
int *ptr = arrayOfElements[1].data;
*ptr = 76;
我不能重用*ptr,即使我使用free(ptr),如果您不知道ArrayOfelments将有多少元素,是否仍有必要这样做?
你现在处境艰难。C标准(草案n1256)在6.3转换中规定:
2将操作数值转换为兼容类型不会更改值或表示形式
后来在6.3。2.3指针:
5整数可以转换为任何指针类型。除了前面指定的,结果是实现定义的,可能没有正确对齐,可能没有指向引用类型的实体,并且可能是陷阱表示。56)
6任何指针类型都可以转换为整数类型。除非前面指定,否则结果是实现定义的。如果结果不能用整数类型表示,则行为未定义。结果不必在任何整数类型的值范围内。
标准库甚至定义了一个特殊的整数类型intptr\u t
,它可以接受而不丢失任何指针,但这只是一个信息部分。
无论如何,在所有常见的实现中,可以安全地将整数来回转换为指针,前提是:
intptr_t
因此,您可以:
array[0].data = (void *) (intptr_t) 65;
后来
int i = (intptr_t) array[0].data;
您问题中的malloc
创建了一个包含三个结构的数组。每个struct
都有一个名为data
的未初始化指针。在使用该指针之前,必须再次调用malloc
对其进行初始化。
要存储int
:
array[0].data = malloc( sizeof(int) );
int *ptr = array[0].data;
*ptr = 65;
要存储字符串:
array[0].data = malloc( strlen(str) + 1 );
strcpy( array[0].data, str );
下面是一个完整的示例,演示如何初始化数组,打印数组的元素,然后释放
数组。请注意,
ptr
只是一个临时变量,用于避免与强制转换和取消引用void*
相关的糟糕语法。(一个好的编译器将优化ptr
变量。)
int main( void )
{
int *ptr;
char *str = "hello";
Element *array = malloc(3 * sizeof(Element) );
array[0].data = malloc( sizeof(int) );
ptr = array[0].data;
*ptr = 65;
array[1].data = malloc( strlen(str) + 1 );
strcpy( array[1].data, str );
array[2].data = malloc( sizeof(int) );
ptr = array[2].data;
*ptr = 76;
ptr = array[0].data;
printf( "%d\n", *ptr );
str = array[1].data;
printf( "%s\n", str );
ptr = array[2].data;
printf( "%d\n", *ptr );
for ( int i = 0; i < 3; i++ )
free( array[i].data );
free( array );
}
指针变量数据类型的强制转换 必须显式强制类型转换,不允许隐式类型转换 指向空间的强制类型转换,本质上就是普通变量的强制类型转换 int a = 10; float b = 3.14; int *pa = &a; float *pb = &b; *pa = (int)*pb; // 等价于 a = (int)b; 指针本身强制类型转换,改变的是对其指向空间的引用方式(空间大小和存储结构) int
本文向大家介绍jquery把int类型转换成字符串类型的方法,包括了jquery把int类型转换成字符串类型的方法的使用技巧和注意事项,需要的朋友参考一下 jQuery中把获取的number类型数据转换成字符串类型 以上就是小编为大家带来的jquery把int类型转换成字符串类型的方法全部内容了,希望大家多多支持呐喊教程~
我只是无法在c中转换不同的数据类型,我知道c是一种强类型语言,所以我在这里使用了,但我面临一个问题,错误消息是 从“std::string{aka std::basic_string}类型转换为“int”类型的static_
在带有的行上。 怎么啦?
指针变量也是变量,是变量就可以任意赋值,不要越界即可(32位编译器指针大小为4字节,64位编译器指针大小为8字节),但是,任意数值赋值给指针变量没有意义,因为这样的指针就成了野指针,此指针指向的区域是未知(操作系统不允许操作此指针指向的内存区域)。所以,野指针不会直接引发错误,操作野指针指向的内存区域才会出问题。 int a = 100; int *p; p = a; //把a的值赋值给指针变量p
主要内容:到底使用字符数组还是字符串常量C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在《 C语言字符数组和字符串》中已经进行了详细讲解,这里不妨再来演示一下: 运行结果: https://www.xnip.cn https://www.xnip.cn 字符数组归根结底还是一个数组,上节讲到的关于 指针和数组的规则同样也适用于字符数组。更改上面的代码,使用指针的方式来输出字符串: 运行结果: https://ww