当使用C中的数组和指针时,人们会很快发现它们并不等同,尽管乍一看似乎是这样.我知道L值和R值的差异.不过,最近我试图找出一个可以与二维数组结合使用的指针类型,即
int foo[2][3];
int (*a)[3] = foo;
Run Code Online (Sandbox Code Playgroud)
不过,我只是不能找出编译器如何"理解"的类型定义,尽管常规运算符优先级规则*和[].相反,如果我使用typedef,问题会变得非常简单:
int foo[2][3];
typedef int my_t[3];
my_t *a = foo;
Run Code Online (Sandbox Code Playgroud)
在底线,有人可以回答我关于int (*a)[3]编译器如何读取该术语的问题吗?int a[3]很简单,int *a[3]也很简单.但那么,为什么不int *(a[3])呢?
编辑:当然,而不是"类型转换"我的意思是"typedef"(它只是一个错字).
我有一个字符串说: Order_num = "0982asdlkj"
我如何将它分成2个变量,使用数字元素,然后将另一个变量与php中的字母元素分开?
数字元素可以是1到4之间的任何长度,并且字母元素填充其余部分以使每个order_num总共10个字符.
我已经找到了php explode函数...但是不知道如何在我的情况下制作它,因为数字的数量介于1和4之间,并且字母在此之后是随机的,因此无法在特定字母处分割.请尽可能具体帮助!
有人可以描述一下C或C++程序员在开发Windows时对.Net编程有什么好处吗?
是否可以通过遍历数组一次从整数数组中找到第二个最大数字?
作为一个例子,我有一个由五个整数组成的数组,我希望从中找到第二个最大数.以下是我在采访中的尝试:
#define MIN -1
int main()
{
int max=MIN,second_max=MIN;
int arr[6]={0,1,2,3,4,5};
for(int i=0;i<5;i++){
cout<<"::"<<arr[i];
}
for(int i=0;i<5;i++){
if(arr[i]>max){
second_max=max;
max=arr[i];
}
}
cout<<endl<<"Second Max:"<<second_max;
int i;
cin>>i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然而,采访者想出了测试用例int arr[6]={5,4,3,2,1,0};,这使得它无法if第二次进入这种情况.我对面试官说,唯一的办法是解析数组两次(两个for循环).有人有更好的解决方案吗?
我需要一个像preg_replace一样的函数,但我需要它来处理文件/文件内容而不是字符串.
我有一个阵列
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
)
Run Code Online (Sandbox Code Playgroud)
如何删除最新的2个单元格并缩短它?
Array
(
[0] => 0
[1] => 1
[2] => 2
)
Run Code Online (Sandbox Code Playgroud)
谢谢
当我写下面的程序时:
档案1:
#include <stdio.h>
int global;
void print_global1() {
printf("%p\n", &global);
}
Run Code Online (Sandbox Code Playgroud)
档案2:
#include <stdio.h>
char global;
void print_global2() {
printf("%p\n", &global);
}
Run Code Online (Sandbox Code Playgroud)
档案3:
void print_global1();
void print_global2();
int main()
{
print_global1();
print_global2();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./a.out
0x804a01c
0x804a01c
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
-Wall -Wextra -ansi......)PS:第二个问题是架构/编译器相关,所以让我们把gcc或Visual C++(对于C)的int大小为32位
编辑:这不是C++的问题,但对于C!
我使用gcc版本4.4.1和Ubuntu 9.10,这是编译控制台输出:
$ ls
global_data1.c global_data2.c global_data.c
$ gcc -Wall -Wextra -ansi global_data*.c
$ ./a.out
0x804a01c
0x804a01c
or
$ gcc -Wall -Wextra -ansi -c global_data*.c
$ …Run Code Online (Sandbox Code Playgroud)