首页
学习
活动
专区
工具
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 对象

    65320

    Java中按值传递

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

    1.8K40

    【专业技术第十二讲】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

    639100

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

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

    46520

    Python 函数介绍及总结

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

    33820

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

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

    7010

    学妹问 Golang new 与make 是什么?

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

    28530

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

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

    55820

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

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

    54810

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

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

    87210

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

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

    70310

    会写「18.dp」只是个入门——Kotlin 扩展函数和属性(Extension FunctionsProperties)

    就好像你钻到这个类源码里,改了它代码,给它增加了一个新函数一样。虽然事实上不是,但用起来基本一样。具体区别我等会儿说。 这种用法给我们开发带来了极大便利,我们可以用它来做很多事。...最终 Kotlin 给我们方案就是:在这种调用方式下,增加一个函数参数,让我们把第一个参数位置填上调用者。这样,我们就可以用函数引用来调用成员函数和扩展函数了。...(Int) -> Unit = String::method1 val b: (String, Int) -> Unit = String::method1 这两种写法都是合法为什么?...(Int) -> Unit = ::method3 // 这种写法也行哦 哇塞,没有报错!是的,这样赋值也是可以。...记不住把视频多刷几遍,不要怕,我在我课程里也经常跟我学员说:你把每节课多刷几遍,别嫌费时间,又不是电视剧,知识密度这么大课程你多看几遍只赚亏。

    95110

    Kotlin安卓开发学习(2)

    使用Kotlin时,我们是直接对属性进行赋值和读取,因为Kotlin会自动将赋值、读取语句转换成get/set方法,方便开发者使用。...= 0 } 与Java中不同,Kotlin中继承需要在继承类后面加上一对括号,为什么需要加上括号,这就涉及了Kotlin主构造函数和次构造函数概念。...主构造函数是我们最常用构造函数,每个类默认都会有一个不带参数主构造函数,当然也可以显式地给它指明参数。主构造函数特点是没有函数体,直接定义在类名后面即可。...另外,由于构造函数中参数是在创建实例时候传入,不像之前写法那样还得重新赋值,因此我们可以将参数全部声明成val。...,并将sno和grade这两个参数赋值成初始值;第二个次构造函数接收任何参数,它通过this关键字调用了我们刚才定义第一个次构造函数,并将name和age参数赋值成初始值,由于第二个次构造函数间接调用了主构造函数

    38520
    领券