首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么SDL_QueryTexture不给它的int*参数赋值?

SDL_QueryTexture函数是Simple DirectMedia Layer(SDL)库中的一个函数,用于查询纹理的属性。它的原型如下:

代码语言:c
复制
int SDL_QueryTexture(SDL_Texture* texture, Uint32* format, int* access, int* w, int* h);

该函数的作用是获取纹理的格式、访问方式、宽度和高度等属性信息,并将其存储在传入的参数中。其中,format是一个32位的无符号整数,access是一个整数,w和h分别是指向整数的指针。

在函数调用时,我们可以传入一个非空的指针作为参数,以便获取相应的属性值。但是,为什么在SDL_QueryTexture函数中不给int*参数赋值呢?

这是因为SDL_QueryTexture函数的返回值已经提供了对应的属性信息。函数的返回值是一个整数,表示操作的结果。如果返回值为0,则表示查询成功,可以通过传入的参数获取相应的属性值。如果返回值为-1,则表示查询失败。

因此,我们可以通过检查SDL_QueryTexture函数的返回值来确定查询是否成功,并使用传入的int参数获取属性值。如果返回值为0,则可以通过检查int参数是否被赋值来获取相应的属性值。如果返回值为-1,则说明查询失败,int*参数的值将保持不变。

总结起来,SDL_QueryTexture函数不给int*参数赋值是因为它通过返回值来表示查询的结果,而不是直接修改传入的参数。这种设计可以提供更灵活的错误处理和结果判断方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

指针*和引用&的区别使用

栗子来一颗: int a; int &at = a; //上述声明允许将at和a互换,它们指向相同的值和内存单元,就像连体婴一样。 上面这个栗子其实很有内涵在里面 我为什么不写成下面这个形式呢?...//如果理解不了,这样理解:参数中的*和&只是走个过场,告诉人家那个参数是什么类型的 //调用函数时的参数是a,不是*a,也不是&a //所以&a传的这个a是一个int类型,而*a的这个a就是指针...,地址,所以要取地址传给它 //虽然我语文不好,但是都讲到这份上了那应该是可以理解了 return 0; } 如果你的意图是让函数使用传给它的信息,又不想把这些信息进行改动,那么应该使用const。...当然,这里还有另外的应用场景: void test2(const JieGouTi1 *a,JieGouTi2 *b) { //将a中的某些值赋值给b } //这里有一个注意点,传进去赋值的结构体指针最好用...const. 4、函数指针 关于为什么要使用函数指针,我的理解还不是很深刻,毕竟功力不足。

1.1K50

【码上开学】Kotlin 的高阶函数、匿名函数和 Lambda 表达式

不过对于一个声明好的函数,不管是你要把它作为参数传递给函数,还是要把它赋值给变量,都得在函数名的左边加上双冒号才行: a(::b) val d = ::b 这……是为什么呢?...那既然都是一个东西,为什么不直接写函数名,而要加两个冒号呢? 因为加了两个冒号,这个函数才变成了一个对象。 什么意思?...不过我们先停下想一想:这个 Lambda 这也不写那也不写的……它不迷茫吗?它是怎么知道自己的参数类型和返回值类型的? 靠上下文的推断。我调用的函数在声明的地方有明确的参数信息吧?...那为什么匿名函数就这么特殊呢? 因为 Kotlin 的匿名函数不——是——函——数。它是个对象。...这就是为什么,你会发现当你在 Kotlin 里调用 View.java 这个类的 setOnClickListener() 的时候,可以传 Lambda 给它来创建 OnClickListener 对象

2.1K20
  • 那个男人再发力,原来我以前学的 Lambda 都是假的

    不过对于一个声明好的函数,不管是你要把它作为参数传递给函数,还是要把它赋值给变量,都得在函数名的左边加上双冒号才行: a(::b) val d = ::b 这……是为什么呢?...那既然都是一个东西,为什么不直接写函数名,而要加两个冒号呢? 因为加了两个冒号,这个函数才变成了一个对象。 什么意思?...不过我们先停下想一想:这个 Lambda 这也不写那也不写的……它不迷茫吗?它是怎么知道自己的参数类型和返回值类型的? 靠上下文的推断。我调用的函数在声明的地方有明确的参数信息吧?...那为什么匿名函数就这么特殊呢? 因为 Kotlin 的匿名函数不——是——函——数。它是个对象。...这就是为什么,你会发现当你在 Kotlin 里调用 View.java 这个类的 setOnClickListener() 的时候,可以传 Lambda 给它来创建 OnClickListener 对象

    65820

    Java中的按值传递

    (=)的作用 num = 20; str = "java"; 对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。...对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。 如上图所示,”hello” 字符串对象没有被改变。...也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容 。...a是传入参数的一个拷贝,对a进行操作不 * 会对原数值产生影响 */ addNum(int a) 这个过程说明:Java 程序设计语言对对象采用的不是引用调用,实际上,对象引用是按值传递的。...下面总结一下 Java 中方法参数的使用情况: 一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。 一个方法可以改变一个对象参数的状态 。 一个方法不能让对象参数引用一个新的对象。

    1.8K40

    【C++终极篇】C++11:编程新纪元的神秘力量揭秘

    ② 移动赋值是⼀个赋值运算符的重载,他跟拷⻉赋值构成函数重载,类似拷⻉赋值函数,移动赋值函 数要求第⼀个参数是该类类型的引⽤,但是不同的是要求这个参数是右值引⽤。 那么移动的概念又是什么呢?...,而是可以直接用构造这个对象的参数去初始化,(这里涉及了它底层收到传递的这个参数该如何操作问题) :其实就是由于它支持了可变模版参数,于是就把你给它的这个参数包一直往里传(这里注意右值引用是左值属性可能会走不是我们预期的函数...当我们调⽤newCallable时,newCallable会调⽤callable,并传给它arg_list中的参数。...->(这里我们所调用的函数想给它传参就根据对应没被绑定的位置传参,如果要想给这个函数某个参数写死,调用时候这个形参是固定值,那么就可以在bind里对应函数位置给它写死,其次就是我们调用这个对象给它传参数...decltype(rci) y = x; // y的类型是const int& decltype(rci) z; //这里是const int&不能给它随机赋值,是常量故报错 int* p1 =

    2900

    【专业技术第十二讲】void的妙用

    void真正的用途在下面两个方面: 对函数返回值的限定 对函数参数的限定 比如,函数没有返回值,那么函数可能会声明成这样:void fun(int a); 如果函数有返回值,但是函数没有参数,那么函数的可能会声明成这样...*p = c; memset(p, 0, 4); 为什么memset传int *还是char *都没有问题呢?...我们知道不同类型间复制是要进行强制转换的,那么这里为什么不用强制类型转换呢。我们看memset的原型会发现,memset的第一个参数就是void *。 2. void *类型可以接受任意类型指针。...例如: void *p1; char *p2 = "hellp"; p1 = p2; 这是没有问题的,任何类型的指针都可以直接赋值给它,无需进行强制类型转换。...但需要注意的一点是,void *的类型并不能无需类型转换直接赋值给其他类型,比如malloc的返回值是void *,那么我们一般这样写:char *p = (char *)malloc(4); 3. void

    650100

    初识C语言·字符(串)函数

    至于为什么加const,因为我们只是计算长度,不希望字符串的内容被修改,所以加个const修饰一下,结合前面的递归知识,这个是很好理解的。...,为什么基础呢?...,循环体内就是赋值的过程,赋值好之后就是指针指向的空间往后跳一个的操作,最后赋值完成,因为pb最后指向的是\0,但是pa是没有赋值到\0的,所以我们需要手动给它一个\0。...根据cplusplus的记载,头文件是string,返回值是int类型的,实际上返回的时候只会返回1 0 -1,在前面的qsort的模拟实现的时候我们也利用了这点,参数是两个字符串的地址,因为我们只是比较不希望改变值...,所以在vs里面给它们加上_s的后缀,至于为什么,问vs咯。

    8210

    Python 函数介绍及总结

    函数: 为什么要用函数?   ...    函数名:以后可以根据函数名调用函数     函数体:中间可以做一系列的运算     参数:为函数提供形参(形参不占用内存空间,调用时才会占用内存,在调用结束后,才会被释放;实参是给实参进行赋值...) 注:1、位置参数一定要放在默认参数的左边;2、一个形参只能给它传一次;3、形参个数,一个不能多,一个也不能少     返回值(return):当函数执行完毕后,可以给调用者返回数据。...      一个形参只能给它传一次,不能被赋予多个值 *args除了关键字参数、**kwargs字典,其他都可以传,它是一个元祖,不传也可以       **kwargs只能接受关键字参数,如果接受字典的话...,需在字典前面要加**,不传也可以       优先级:位置参数-->普通参数-->默认参数-->*args-->**kwargs ?

    34120

    Java学习笔记_零基础系列(十一)Java对象的创建及使用方法

    ✔上一篇Java零基础系列文章我们说到了Java中的面向对象,今天这篇文章主要围绕下边几个知识点: Java对象的创建和使用方法 为什么要画内存图?(非常重要) 程序在什么情况下会出现空指针异常呢?...这是因为在java语言当中,当实例变量没有手动赋值,在创建对象的时候,也就是说在new的时候,系统会对实例变量默认赋值,它们的默认值请参考下表: 数据类型 默认值 byte 0 short 0 int...为什么要画内存图?(非常重要) 第一:有了内存图,程序不运行,我也知道结果。(可以推算出结果) 第二:有了内存图,有助于你调试程序。 画内存图是对Java运行机制的一种理解。...5.2、当一个类中手动的提供了构造方法,那么系统将不再默认提供无参数构造方法。 建议将无参数构造方法手动的写出来,这样一定不会出问题。 5.3、无参数构造方法和有参数的构造方法都可以调用。...5.5、对于实例变量来说,只要你在构造方法中没有手动给它赋值,统一都会默认赋值。默认赋系统值。 构造方法需要掌握的知识点: 1.构造方法有什么作用? 2.构造方法怎么定义,语法是什么?

    47120

    C++天使的灵动心跳代码:类和对象(中上)

    • 析构函数:主要完成清理工作 • 拷贝构造函数:使用同类对象初始化创建对象 • 赋值运算符重载函数:将一个对象的值赋值给另一个同类型的对象 • 取地址运算符重载函数:返回对象的地址或返回const对象的地址...它没有参数或者所有参数都有默认值(全缺省),比如使用缺省参数就是,并且在对象整个生命周期内只调用一次 为什么要有默认构造函数? 当创建一个对象时,需要对其进行初始化。...这就像是在建造一个房子时,给它一个基本的初始状态,比如所有的房间都是空的,墙壁是白色的等 为什么内置类型不用默认构造函数?...; } 这里调用的默认构造函数是无参的,也可以不写 num = 0 这一条语句,只不过 num 的值就变成随机值了,也就是说如果要对对象进行操作一定要有默认构造函数显式存在,无论你赋不赋值,至少要让 num...有个值保证其处于一个确定的状态 ;反过来如果只是创建了对象的话,没有进行对象操作,那么可以不显式写默认构造函数,编译器会自动生成一个无参的默认构造函数 值得注意的是:调用构造函数不传参数时不能写成MyClass

    4500

    学妹问 Golang 的 new 与make 是什么?

    ” 变量声明的方式 var test1 int var test2 string 我们可以通过 var+变量名称+变量类型 进行声明变量,当我们没有给它赋值的时候,它们的结果是变量类型的零值...,因为对于引用类型的变量,不仅要声明,并且还要给它分配内存。...怎么给它分配内存呢?这就要用到了new了 什么是new new 是 Golang 的内置函数,源代码如下: 大意是,分配内存的内置函数,第一个参数是类型,而不是具体的值,返回值是该类型的指针。...大意是make内置函数分配并初始化一个slice、map或chan类型的对象。像new函数一样,第一个参数是类型,而不是值。 与new不同,make的返回类型与其参数的类型相同,而不是指向它的指针。...结果的取决于传入的类型。 并且 slice在 make 的时候,第二个参数必须传递,也就是切片的长度。否则会编译失败。

    28930

    【C++学习篇】C++11第三期

    在C++11中更简单,只需在该函数声明加上=delete即可,该语法指⽰编译器不⽣成对应函数的默认版本,称=delete修饰的函数为删除函数。(=delete就是不允许拷贝) 2....包装器 2.1 function 示例1: 示例2:包装其他类域里面的函数 2.1.1 为什么调用类域里面的静态函数不需要定义对象? 2.1.2 我们来回忆一下,函数指针调用的方式!!!...,对应给定的callable的参数。...当我们调⽤newCallable时,newCallable会调⽤callable,并传给它arg_list中的参数。 3....arg_list中的参数可能包含形如_n的名字,其中n是⼀个整数,这些参数是占位符,表⽰newCallable的参数,它们占据了传递给newCallable的参数的位置。

    4510

    万字长文带你掌握C++11中auto和decltype的用法和区别

    后面的 m 变量自然也为 int 类型,所以把 99 赋值给它也是正确的。 这里我们要注意,推导的时候不能有二义性。...这个应该很容易理解,我们在定义函数的时候只是对参数进行了声明,指明了参数的类型,但并没有给它赋值,只有在实际调用函数的时候才会给参数赋值;而 auto 要求必须对变量进行初始化,所以这是矛盾的。...这种要求在以前的 C++ 版本中实现起来非常的麻烦,需要额外增加一个模板参数,并在调用时手动给该模板参数赋值,用以指明变量 val 的类型。...既然已经有了 auto 关键字,为什么还需要 decltype 关键字呢?...另外,auto 要求变量必须初始化,也就是在定义变量的同时必须给它赋值;而 decltype 不要求,初始化与否都不影响变量的类型。

    63210

    Java 8 - 04 类型检查、类型推断以及限制

    privilegedAction = () -> 18; 第一个赋值的目标类型是 Callable 第二个赋值的目标类型是PrivilegedAction 再举个栗子 : 同一个Lambda...Lambda表达式可以从赋值的上下文、方法调用的上下文(参数和返回值),以及类型转换的上下文中获得目标类型 来个小测验 类型检查——为什么下面的代码不能编译呢?...举个例子 int num = 1; Runnable runnable = ()->System.out.println(num); 这么做虽然有点啰嗦,我们这里想要讨论的是 使用外部的变量有什么限制吗...换句话说,Lambda表达式只能捕获指派给它们的局部变量一次。(注:捕获实例变量可以被看作捕获最终局部变量 this 。) 如上图。 为什么会这样呢?...如果局部变量仅仅赋值一次那就没有什么区别了——因此就有了这个限制 第二,这一限制不鼓励你使用改变外部变量的典型命令式编程模式,这种模式会阻碍很容易做到的并行处理.

    88610

    认真理一理C++的构造函数

    如何禁止拷贝形式的初始化? 前言 我们在C语言中使用堆栈中的变量时,常常需要给它赋初始值,用于避免使用到了不可预知的值。...为什么需要构造函数 有的人可能会奇怪,发现自己写的代码即便没有初始化,也有正常的初始值,而且每次运行都是一样,而不是随机的,这是为什么呢?...编程珠玑"); test.printTest(); return ; } 输出结果: name:编程珠玑,age:3,month:36 在这里我们为a提供了默认实参值0,因此只传入一个参数也可以构造...初始化const和引用成员 不知道你是否还记得,对于const类型或者是引用类型,我们必须给它初始化,因此对于有const或者引用的成员变量,必须在构造函数中给它初始化,注意是初始化,而不是赋值。...age; string &name; }; 这里没有初始化,会报错,下面这里使用了赋值形式的初始化,同样报错: class Test { private: const int age

    56220

    C++ 温习笔记(2) - extern,预处理命令#pragma,static

    3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。   ...由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。...预处理命令#pragma 都是在编译过程中执行 #pragma parameter message:提示一些信息 argsused:在函数与函数之间定义,仅影响下一个函数,不警告参数未用 exit和startup...也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化。 静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。...你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值。 静态成员的值对所有的对象是一样的。静态成员可以被初始化,但只能在类体外进行初始化。

    71210
    领券