我想知道的区别str == NULL和str[0] == '\0':
int convert_to_float(char *str, double *num)
{
if ((str == NULL) || (str[0] == '\0'))
return(-1);
*num = strtod(str, (char **)NULL);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
我在Linux上使用gcc.
我有一个类型的C++对象 ObjectArray
typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
Run Code Online (Sandbox Code Playgroud)
创建一个unique_ptr新的类型对象Class1并将其插入到类型的对象中的语法是什么ObjectArray?
这段代码的行为是否定义得很好?
#include <stdio.h>
#include <stdint.h>
int main(void)
{
void *ptr = (char *)0x01;
size_t val;
ptr = (char *)ptr + 1;
val = (size_t)(uintptr_t)ptr;
printf("%zu\n", val);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的意思是,我们可以为指针分配一些固定数字,即使它指向某个随机地址也会增加它吗?(我知道你不能取消引用它)
试图理解C中指针的行为,我对以下内容感到有点惊讶(下面的示例代码):
#include <stdio.h>
void add_one_v1(int *our_var_ptr)
{
*our_var_ptr = *our_var_ptr +1;
}
void add_one_v2(int *our_var_ptr)
{
*our_var_ptr++;
}
int main()
{
int testvar;
testvar = 63;
add_one_v1(&(testvar)); /* Try first version of the function */
printf("%d\n", testvar); /* Prints out 64 */
printf("@ %p\n\n", &(testvar));
testvar = 63;
add_one_v2(&(testvar)); /* Try first version of the function */
printf("%d\n", testvar); /* Prints 63 ? */
printf("@ %p\n", &(testvar)); /* Address remains identical */
}
Run Code Online (Sandbox Code Playgroud)
输出:
64
@ 0xbf84c6b0
63
@ 0xbf84c6b0 …Run Code Online (Sandbox Code Playgroud) 我是C的完全新手,在我的大学工作期间,我遇到了代码中的注释,这些注释通常指的是取消引用NULL指针.我有在C#中的背景下,我已经得到通过,这可能是类似于"的NullReferenceException"你是在净得到的,但现在我有严重的怀疑.
有人可以用非专业人员的术语向我解释这是什么以及它为什么不好?
我正在学习C编程语言,我刚开始用指针学习数组.我在这个问题上有问题,我希望输出必须是5但是2,有人可以解释原因吗?
int main(){
int arr[] = {1, 2, 3, 4, 5};
char *ptr = (char *) arr;
printf("%d", *(ptr+4));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我是Go语言的新手,并且只有很少的C/C++背景,所以我很自然地想到何时使用指针以及什么时候不使用指针.虽然这个问题可能被认为是开放式的,但我想知道何时返回结构以及何时返回指针的一些指导原则(等同于何时接受结构/指针作为参数).
根据我的猜测,以下陈述成立:
我的假设是否正确?或者我错过了指针上的标记?
到现在为止,我认为数组与指针相同.但我发现了一个奇怪的案例:
int array[5] = { 10,11,12,13,14};
std::cout << array << std::endl;
std::cout << &array << std::endl;
std::cout << &array[0] << std::endl;
int *pArray = new int[5];
std::cout << pArray << std::endl;
std::cout << &pArray << std::endl;
std::cout << &pArray[0] << std::endl;
Run Code Online (Sandbox Code Playgroud)
0x7ffeed730ad0
0x7ffeed730ad0
0x7ffeed730ad0
0x7f906d400340
0x7ffeed730a30
0x7f906d400340
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,array并且&array具有相同的价值.但是pArray并且&pArray有不同的价值.如果数组与指针相同,则数组的地址应与数组不同.怎么可能array和&array是一样的?如果array和&array相同,保存数组值的内存的地址是什么?
看下面这个简单的代码:
struct Point {
int x;
int y;
};
void something(int *);
int main() {
Point p{1, 2};
something(&p.x);
return p.y;
}
Run Code Online (Sandbox Code Playgroud)
我希望main可以将返回值优化为return 2;,因为something它无法访问p.y,只能返回的指针p.x。
但是,没有一个主要的编译器会优化mainto 的返回值2。上帝保佑。
如果仅允许访问,标准中是否存在可以something修改的内容?如果是,这是否取决于标准布局?p.yp.xPoint
如果我使用something(&p.y);,该return p.x;怎么办?